亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

HBase入門篇2-Java操作HBase例子

系統 1975 0
網址: http://www.javabloger.com/article/apache-hbase-shell-and-java-api-html.html

本篇文章講述用HBase Shell命令 和 HBase Java API 對HBase 服務器 進行操作。在此之前需要對HBase的總體上有個大概的了解。比如說HBase服務器內部由哪些主要部件構成?HBase的內部工作原理是什么?我想學習任何一項知識、技術的態度不能只是知道如何使用,對產品的內部構建一點都不去關心,那樣出了問題,很難讓你很快的找到答案,甚至我們希望最后能對該項技術的領悟出自己的心得,為我所用,借鑒該項技術其中的設計思想創造出自己的解決方案,更靈活的去應對多變的計算場景與架構設計。以我目前的對HBase的了解還不夠深入,將來不斷的學習,我會把我所知道的點滴分享到這個Blog上。

先來看一下讀取一行記錄HBase是如何進行工作的,首先HBase Client端會連接Zookeeper Qurom (從下面的代碼也能看出來,例如:HBASE_CONFIG.set("hbase.zookeeper.quorum", "192.168.50.216") )。通過Zookeeper組件Client能獲知哪個Server管理-ROOT- Region。那么Client就去訪問管理-ROOT-的Server,在META中記錄了HBase中所有表信息,(你可以使用 scan '.META.' 命令列出你創建的所有表的詳細信息),從而獲取Region分布的信息。一旦Client獲取了這一行的位置信息,比如這一行屬于哪個Region,Client將會緩存這個信息并直接訪問HRegionServer。久而久之Client緩存的信息漸漸增多,即使不訪問.META.表也能知道去訪問哪個HRegionServer。HBase中包含兩種基本類型的文件,一種用于存儲WAL的log,另一種用于存儲具體的數據,這些數據都通過DFS Client和分布式的文件系統HDFS進行交互實現存儲。

如圖所示:



查看大圖請點擊這里

再來看看HBase的一些內存實現原理:
* HMaster— HBase中僅有一個Master server。
* HRegionServer—負責多個HRegion使之能向client端提供服務,在HBase cluster中會存在多個HRegionServer。
* ServerManager—負責管理Region server信息,如每個Region server的HServerInfo(這個對象包含HServerAddress和startCode),已load Region個數,死亡的Region server列表
* RegionManager—負責將region分配到region server的具體工作,還監視root和meta 這2個系統級的region狀態。
* RootScanner—定期掃描root region,以發現沒有分配的meta region。
* MetaScanner—定期掃描meta region,以發現沒有分配的user region。

HBase基本命令
下面我們再看看看HBase的一些基本操作命令,我列出了幾個常用的HBase Shell命令,如下:

名稱
命令表達式
創建表 create '表名稱', '列名稱1','列名稱2','列名稱N'
添加記錄 put '表名稱', '行名稱', '列名稱:', '值'
查看記錄 get '表名稱', '行名稱'
查看表中的記錄總數 count '表名稱'
刪除記錄 delete '表名' ,'行名稱' , '列名稱'
刪除一張表 先要屏蔽該表,才能對該表進行刪除,第一步 disable '表名稱' 第二步 drop '表名稱'
查看所有記錄 scan "表名稱"
查看某個表某個列中所有數據 scan "表名稱" , ['列名稱:']
更新記錄 就是重寫一遍進行覆蓋

如果你是一個新手隊HBase的一些命令還不算非常熟悉的話,你可以進入 hbase 的shell 模式中你可以輸入 help 命令查看到你可以執行的命令和對該命令的說明,例如對scan這個命令,help中不僅僅提到有這個命令,還詳細的說明了scan命令中可以使用的參數和作用,例如,根據列名稱查詢的方法和帶LIMIT 、STARTROW的使用方法:
scan Scan a table; pass table name and optionally a dictionary of scanner specifications. Scanner specifications may include one or more of the following: LIMIT, STARTROW, STOPROW, TIMESTAMP, or COLUMNS. If no columns are specified, all columns will be scanned. To scan all members of a column family, leave the qualifier empty as in 'col_family:'. Examples:
hbase> scan '.META.'
hbase> scan '.META.', {COLUMNS => 'info:regioninfo'}
hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}


使用Java API對HBase服務器進行操作

需要下列jar包
hbase-0.20.6.jar
hadoop-core-0.20.1.jar
commons-logging-1.1.1.jar
zookeeper-3.3.0.jar
log4j-1.2.91.jar

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.BatchUpdate;

@SuppressWarnings("deprecation")
public class HBaseTestCase {

static HBaseConfiguration cfg = null;
static {
Configuration HBASE_CONFIG = new Configuration();
HBASE_CONFIG.set("hbase.zookeeper.quorum", "192.168.50.216");
HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");
cfg = new HBaseConfiguration(HBASE_CONFIG);
}


/**
* 創建一張表
*/
public static void creatTable(String tablename) throws Exception {
HBaseAdmin admin = new HBaseAdmin(cfg);
if (admin.tableExists(tablename)) {
System.out.println("table Exists!!!");
}
else{
HTableDescriptor tableDesc = new HTableDescriptor(tablename);
tableDesc.addFamily(new HColumnDescriptor("name:"));
admin.createTable(tableDesc);
System.out.println("create table ok .");
}


}

/**
* 添加一條數據
*/
public static void addData (String tablename) throws Exception{
HTable table = new HTable(cfg, tablename);
BatchUpdate update = new BatchUpdate("Huangyi");
update.put("name:java", "http://www.javabloger.com".getBytes());
table.commit(update);
System.out.println("add data ok .");
}

/**
* 顯示所有數據
*/
public static void getAllData (String tablename) throws Exception{
HTable table = new HTable(cfg, tablename);
Scan s = new Scan();
ResultScanner ss = table.getScanner(s);
for(Result r:ss){
for(KeyValue kv:r.raw()){
System.out.print(new String(kv.getColumn()));
System.out.println(new String(kv.getValue() ));
}

}
}


public static void main (String [] agrs) {
try {
String tablename="tablename";
HBaseTestCase.creatTable(tablename);
HBaseTestCase.addData(tablename);
HBaseTestCase.getAllData(tablename);
}
catch (Exception e) {
e.printStackTrace();
}

}

}

HBase入門篇2-Java操作HBase例子


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 美女一级a毛片免费观看 | 成人欧美午夜视频毛片 | 国产大片91精品免费观看不卡 | 四虎影院永久网站 | 99精品热女视频专线 | 成人伊人网 | 91在线中文字幕 | 91chinese 永久免费 | 色香欲综合成人免费视频 | 国产成人久久精品区一区二区 | 国产精品成人亚洲 | 欧美xxx午夜免费视频 | 亚洲情区| 国产农村妇女毛片精品久久久 | 久久国产精品2020盗摄 | 久久精品99精品免费观看 | 狠狠色狠色综合曰曰 | 国产一区二区播放 | 国产亚洲精品久久久久久 | 亚洲尹人香蕉网在线视颅 | 色涩亚洲| 91最新入口 | 99热这里只有精品一区二 | 国产亚洲欧美久久久久 | 国产成人久久一区二区三区 | 日韩免费高清一级毛片久久 | 国产无套免费网站 | 在线视频久久 | 午夜免费福利在线观看 | 成熟女人50岁一级毛片不卡 | 四虎成人4hutv影院 | 日韩中文字幕在线 | 麻豆精品成人免费国产片 | 五月婷婷色综合 | 久久99热成人精品国产 | 老司机午夜性大片免费 | 一区二区三区毛片免费 | 亚洲国产一 | 亚洲精品丝袜在线一区波多野结衣 | 亚洲九九| 国产精品爱啪在线线免费观看 |