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

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

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

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

先來看一下讀取一行記錄HBase是如何進(jìn)行工作的,首先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.' 命令列出你創(chuàng)建的所有表的詳細(xì)信息),從而獲取Region分布的信息。一旦Client獲取了這一行的位置信息,比如這一行屬于哪個Region,Client將會緩存這個信息并直接訪問HRegionServer。久而久之Client緩存的信息漸漸增多,即使不訪問.META.表也能知道去訪問哪個HRegionServer。HBase中包含兩種基本類型的文件,一種用于存儲WAL的log,另一種用于存儲具體的數(shù)據(jù),這些數(shù)據(jù)都通過DFS Client和分布式的文件系統(tǒng)HDFS進(jìn)行交互實現(xiàn)存儲。

如圖所示:



查看大圖請點擊這里

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

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

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

如果你是一個新手隊HBase的一些命令還不算非常熟悉的話,你可以進(jìn)入 hbase 的shell 模式中你可以輸入 help 命令查看到你可以執(zhí)行的命令和對該命令的說明,例如對scan這個命令,help中不僅僅提到有這個命令,還詳細(xì)的說明了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對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號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久操热久操 | 亚洲香蕉影院 | 毛片在线视频观看 | 伊人99在线 | 久久精品国产主播一区二区 | 日日撸夜夜干 | 四虎影院新网址 | 愉拍自拍视频在线播放 | 男人都懂www深夜免费网站 | 99re5在线精品视频热线 | 欧美777精品久久久久网 | 久久国产美女免费观看精品 | 精品在线免费观看视频 | 91久久国产成人免费观看资源 | 在线视频99 | 色综合久久一区二区三区 | 国产在线麻豆一区二区 | 亚洲精品乱码一区二区在线观看 | 一级做a爰片久久毛片唾 | 国内一级特黄女人精品片 | 国产精品热久久 | 日本又黄又爽又色的免费视频 | 国产成人在线观看免费网站 | 四虎视频国产在线观看 | 亚洲一区二区三区免费观看 | 五月婷婷激情综合网 | 四虎影视永久免费观看 | 99热久久只有精品99只有精品 | 2020国产成人免费视频 | 国产精品欧美日韩精品 | 妖精www视频在线观看高清 | 香蕉成人啪国产精品视频综合网 | 一本一本久久a久久综合精品蜜桃 | 九色国产在视频线精品视频 | 中文字幕亚洲国产 | 亚洲精品一区二区三区在 | 国产精品久久久久这里只有精品 | 成人区在线观看免费视频 | 狠狠色噜噜狠狠米奇777 | 婷婷色综合 | 国产99r视频精品免费观看 |