日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統(tǒng) 2166 0
網(wǎng)址: http://www.javabloger.com/article/apache-hbase-shell-and-java-api-html.html

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

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

如圖所示:



查看大圖請(qǐng)點(diǎn)擊這里

再來(lái)看看HBase的一些內(nèi)存實(shí)現(xiàn)原理:
* HMaster— HBase中僅有一個(gè)Master server。
* HRegionServer—負(fù)責(zé)多個(gè)HRegion使之能向client端提供服務(wù),在HBase cluster中會(huì)存在多個(gè)HRegionServer。
* ServerManager—負(fù)責(zé)管理Region server信息,如每個(gè)Region server的HServerInfo(這個(gè)對(duì)象包含HServerAddress和startCode),已load Region個(gè)數(shù),死亡的Region server列表
* RegionManager—負(fù)責(zé)將region分配到region server的具體工作,還監(jiān)視r(shí)oot和meta 這2個(gè)系統(tǒng)級(jí)的region狀態(tài)。
* RootScanner—定期掃描root region,以發(fā)現(xiàn)沒(méi)有分配的meta region。
* MetaScanner—定期掃描meta region,以發(fā)現(xiàn)沒(méi)有分配的user region。

HBase基本命令
下面我們?cè)倏纯纯碒Base的一些基本操作命令,我列出了幾個(gè)常用的HBase Shell命令,如下:

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

如果你是一個(gè)新手隊(duì)HBase的一些命令還不算非常熟悉的話,你可以進(jìn)入 hbase 的shell 模式中你可以輸入 help 命令查看到你可以執(zhí)行的命令和對(duì)該命令的說(shuō)明,例如對(duì)scan這個(gè)命令,help中不僅僅提到有這個(gè)命令,還詳細(xì)的說(shuō)明了scan命令中可以使用的參數(shù)和作用,例如,根據(jù)列名稱查詢的方法和帶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對(duì)HBase服務(wù)器進(jìn)行操作

需要下列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);
}


/**
* 創(chuàng)建一張表
*/
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 .");
}


}

/**
* 添加一條數(shù)據(jù)
*/
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 .");
}

/**
* 顯示所有數(shù)據(jù)
*/
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例子


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 南郑县| 阳春市| 双牌县| 巴楚县| 弥勒县| 青海省| 阳春市| 福鼎市| 依安县| 定襄县| 徐州市| 张北县| 达日县| 禹城市| 巴林右旗| 阜宁县| 罗源县| 静乐县| 宜丰县| 华池县| 嘉荫县| 靖边县| 三都| 孙吴县| 巨野县| 腾冲县| 三河市| 永定县| 周宁县| 永吉县| 佛山市| 巫山县| 安仁县| 甘谷县| 区。| 陆川县| 罗山县| 高邮市| 改则县| 乐昌市| 卓资县|