HBase的簡單java操作

来源:http://www.cnblogs.com/one--way/archive/2016/06/29/5628541.html
-Advertisement-
Play Games

官方文檔:http://hbase.apache.org/book.html java簡單操作hbase的表 ...


官方文檔:http://hbase.apache.org/book.html

 

java簡單操作hbase的表

 

  1 import org.apache.hadoop.conf.Configuration;
  2 import org.apache.hadoop.hbase.*;
  3 import org.apache.hadoop.hbase.client.*;
  4 import org.apache.hadoop.hbase.filter.CompareFilter;
  5 import org.apache.hadoop.hbase.filter.FilterList;
  6 import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
  7 import org.junit.Before;
  8 import org.junit.Test;
  9 
 10 import java.io.IOException;
 11 import java.util.ArrayList;
 12 import java.util.Iterator;
 13 import java.util.Random;
 14 
 15 /**
 16  * Created by Edward on 2016/6/19.
 17  */
 18 public class TestHbase {
 19 
 20     public static Configuration conf = null;
 21     public static TableName table = TableName.valueOf("phone");
 22     public static Random random = new Random();
 23 
 24     @Before
 25     public void setup()
 26     {
 27         //通過zookeeper集群,訪問hbase
 28         conf = HBaseConfiguration.create();
 29         conf.set("hbase.zookeeper.quorum", "node1,node2,node3");
 30         System.out.println("setup");
 31     }
 32 
 33     @Test
 34     public void createTable() throws IOException {
 35         HBaseAdmin hBaseAdmin = new HBaseAdmin(conf);
 36        if(hBaseAdmin.tableExists(table)) {
 37             hBaseAdmin.disableTable(table);
 38             hBaseAdmin.deleteTable(table);
 39         }
 40         //
 41         HTableDescriptor hTableDescriptor = new HTableDescriptor(table);
 42         //列族 cf1
 43         HColumnDescriptor hColumnDescriptor = new HColumnDescriptor("cf1");
 44         hColumnDescriptor.setBlockCacheEnabled(true);
 45         hColumnDescriptor.setBlocksize(128000);
 46         hColumnDescriptor.setMaxVersions(10);
 47         //表增加列族
 48         hTableDescriptor.addFamily(hColumnDescriptor);
 49         hBaseAdmin.createTable(hTableDescriptor);
 50     }
 51 
 52 
 53     @Test
 54     /**
 55      * 插入數據
 56      */
 57     public void insert() throws IOException {
 58 
 59         //創建htable對象
 60         HTable hTable = new HTable(conf, this.table);
 61         ArrayList<Put> list = new ArrayList<Put>();
 62 
 63         for(int i = 0; i<1000; i++)
 64         {
 65             //row_key
 66             Put put = new Put(String.valueOf(i).getBytes());
 67             //column,value
 68             put.add("cf1".getBytes(),"name".getBytes(),"ls".getBytes());
 69             put.add("cf1".getBytes(),"age".getBytes(), String.valueOf(i%100).getBytes());
 70             //把每個put對象放到列表中
 71             list.add(put);
 72         }
 73         //把信息放到表中
 74         hTable.put(list);
 75     }
 76 
 77 
 78     @Test
 79     /**
 80      * 查詢
 81      */
 82     public void search() throws IOException
 83     {
 84 
 85         HTable hTable = new HTable(conf, this.table);
 86         // 創建row_key對應的get對象
 87         Get get = new Get("123".getBytes());
 88         // 獲取get結果
 89         Result result = hTable.get(get);
 90         //獲取 column latest cell
 91         Cell columnLatestCell = result.getColumnLatestCell("cf1".getBytes(), "name".getBytes());
 92         //使用 CellUtil 獲取值
 93         byte[] bytes = CellUtil.cloneValue(columnLatestCell);
 94         System.out.println(new String(bytes));
 95     }
 96 
 97 
 98     @Test
 99     /**
100      *  通過scan方法獲取數據
101      * **/
102     public void search1() throws IOException
103     {
104         HTable hTable = new HTable(conf, this.table);
105         //設置scan範圍
106         Scan scan = new Scan("400".getBytes(),"450".getBytes());
107         //通過scan得到result scanner
108         ResultScanner scanner = hTable.getScanner(scan);
109         //使用迭代器
110         Iterator<Result> iterator = scanner.iterator();
111 
112         while(iterator.hasNext())
113         {
114             Result result= iterator.next();
115             Cell columnLatestCell = result.getColumnLatestCell("cf1".getBytes(), "age".getBytes());
116             //獲取列族中列對應的值
117             byte[] bytes = CellUtil.cloneValue(columnLatestCell);
118             //獲取row_key
119             byte[] bytes1 = CellUtil.cloneRow(columnLatestCell);
120             System.out.println(new String(bytes)+" "+new String(bytes1));
121         }
122     }
123 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • sql 的發佈訂閱,想必大家都瞭解,但一般都是在預設的1433的情況下搭建的,那麼1433換成別的埠,發佈還能正常工作嗎? 在一次客戶的真實場景上我就遇到了。 好了,今天不想寫太多,簡化下, 測試環境 發佈伺服器 電腦名 win-01 分發伺服器 電腦名 win-01 (與發佈用的同一臺) 訂 ...
  • 介紹 以前沒有太註意MySQL密碼安全策略的配置方法,只是人為了將密碼設為複雜密碼,但是沒有找到配置的方法,今天薑承堯的微信公眾號正好發佈了一篇關於這個的文章,所以在這裡也順便將方法寫下來。首先該功能是在5.5以後的mysql版本才引入的插件,預設源碼安裝和二進位安裝都沒有啟用該功能,如果沒有開啟該 ...
  • 今天在測試、驗證DROP_SNAPSHOT_RANGE不能徹底快照的過程中遇到了DROP_SNAPSHOT_RANGE無法清理WRM$_SNAPSHOT_DETAILS表中數據的情況,測試伺服器版本為10.2.0.5.0,AWR的快照是1小時採集一次數據,快照保留14天,也就是二周。具體情況如下所示... ...
  • 雖然使用不多,但是也有情況是需要在mysql 裡面寫語句開發功能的。在sql server 使用慣了,習慣了使用row_number() 函數進行排序,但是mysql 確沒有這樣一個函數。然後找到了po主寫的一篇 文章。通過變數賦值來查詢的。(PS 我測試的版本是mysql 5.6) 參考鏈接:ht ...
  • 簡介: Redis 是一個開源的,高性能的 key-value 系統,可以用來緩存或存儲數據。 Redis 數據可以持久化,並且支持多種數據類型:字元串(string),列表(list),哈希(hash),集合(set)和有序集合(sorted set)。 能夠對關係型資料庫起到很好的補充作用。它還 ...
  • 什麼是臨界點? 註意,我要說的問題是非聚集索引的執行計劃從Seek+Lookup變成Table/Clustered Index Scan的臨界點。SQL Server的訪問數據的IO最小單元是頁。 我們知道聚集索引的葉級是數據頁,非聚集索引的葉級是指向數據行的指針。所以通過聚集索引獲取數據時,就是直 ...
  • 一. 表空間相關命令 創建數據表空間 create SMALLFILE tablespace dataSpace datafile 'E:\oracle\product\10.2.0\oradata\orcl\dataSpace.dbf' SIZE 50M autoextend on next 10 ...
  • WITH RECURSIVE and MySQL If you have been using certain DBMSs, or reading recent versions of the SQL standard, you are probably aware of the so-called ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...