![Hadoop生態(tài)系統(tǒng)及開(kāi)發(fā) 實(shí)訓(xùn)手冊(cè) 實(shí)訓(xùn)8 HBase的API實(shí)戰(zhàn)_第1頁(yè)](http://file4.renrendoc.com/view/efe01921994ebaf91983f570e132d5a4/efe01921994ebaf91983f570e132d5a41.gif)
![Hadoop生態(tài)系統(tǒng)及開(kāi)發(fā) 實(shí)訓(xùn)手冊(cè) 實(shí)訓(xùn)8 HBase的API實(shí)戰(zhàn)_第2頁(yè)](http://file4.renrendoc.com/view/efe01921994ebaf91983f570e132d5a4/efe01921994ebaf91983f570e132d5a42.gif)
![Hadoop生態(tài)系統(tǒng)及開(kāi)發(fā) 實(shí)訓(xùn)手冊(cè) 實(shí)訓(xùn)8 HBase的API實(shí)戰(zhàn)_第3頁(yè)](http://file4.renrendoc.com/view/efe01921994ebaf91983f570e132d5a4/efe01921994ebaf91983f570e132d5a43.gif)
![Hadoop生態(tài)系統(tǒng)及開(kāi)發(fā) 實(shí)訓(xùn)手冊(cè) 實(shí)訓(xùn)8 HBase的API實(shí)戰(zhàn)_第4頁(yè)](http://file4.renrendoc.com/view/efe01921994ebaf91983f570e132d5a4/efe01921994ebaf91983f570e132d5a44.gif)
![Hadoop生態(tài)系統(tǒng)及開(kāi)發(fā) 實(shí)訓(xùn)手冊(cè) 實(shí)訓(xùn)8 HBase的API實(shí)戰(zhàn)_第5頁(yè)](http://file4.renrendoc.com/view/efe01921994ebaf91983f570e132d5a4/efe01921994ebaf91983f570e132d5a45.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)訓(xùn)4.3HBase的API實(shí)戰(zhàn)1.實(shí)訓(xùn)目的認(rèn)識(shí)HBaseJavaAPI并且學(xué)會(huì)簡(jiǎn)單的使用,編程實(shí)現(xiàn)Java連接HBase,編程實(shí)現(xiàn)Java操作HBase表,進(jìn)行數(shù)據(jù)的增刪改查。2.實(shí)訓(xùn)內(nèi)容(1)Java編程實(shí)現(xiàn)連接HBase(2)Java編程實(shí)現(xiàn)對(duì)HBase表的基本操作3.實(shí)訓(xùn)要求以小組為單元進(jìn)行實(shí)訓(xùn),每小組5人,小組自協(xié)商選一位組長(zhǎng),由組長(zhǎng)安排和分配實(shí)訓(xùn)任務(wù),具體參考實(shí)訓(xùn)操作環(huán)節(jié)。需要確保HDFS、ZooKeeper與HBase等環(huán)境安裝正確。4.準(zhǔn)備知識(shí)(1)HBase的API說(shuō)明①HBase采用Java實(shí)現(xiàn),原生客戶端也是Java實(shí)現(xiàn),其他語(yǔ)言需要通過(guò)thrift接口服務(wù)間接訪問(wèn)HBase的數(shù)據(jù)。②HBase作為大數(shù)據(jù)存儲(chǔ)數(shù)據(jù)庫(kù),其寫能力非常強(qiáng),加上HBase本身就脫胎于Hadoop,所以和Hadoop的兼容性極好。(2)HBaseJavaAPI介紹幾個(gè)主要HBaseAPI類和數(shù)據(jù)模型之間的對(duì)應(yīng)關(guān)系如表4-7所示。表4-7API類和數(shù)據(jù)模型之間的關(guān)系java類HBase數(shù)據(jù)模型HBaseAdmin數(shù)據(jù)庫(kù)(DataBase)HBaseConfigurationHTable表(Table)HTableDescriptor列族(ColumnFamily)Put列修飾符(ColumnQualifier)GetScanner①HBaseAdmin關(guān)系:org.apache.hadoop.HBase.client.HBaseAdmin作用:提供了一個(gè)接口來(lái)管理HBase數(shù)據(jù)庫(kù)的表信息。它提供的方法包括:創(chuàng)建表,刪除表,列出表項(xiàng),使表有效或無(wú)效,以及添加或刪除表列族成員等。它的返回值、函數(shù)和描述信息如表4-8所示。表4-8返回值、函數(shù)和描述信息返回值函數(shù)描述voidaddColumn(StringtableName,HColumnDescriptorcolumn)向一個(gè)已經(jīng)存在的表添加列checkHBaseAvailable(HBaseConfigurationconf)靜態(tài)函數(shù),查看HBase是否處于運(yùn)行狀態(tài)createTable(HTableDescriptordesc)創(chuàng)建一個(gè)表,同步操作deleteTable(byte[]tableName)刪除一個(gè)已經(jīng)存在的表enableTable(byte[]tableName)使表處于有效狀態(tài)disableTable(byte[]tableName)使表處于無(wú)效狀態(tài)HTableDescriptor[]listTables()列出所有用戶控件表項(xiàng)voidmodifyTable(byte[]tableName,HTableDescriptorhtd)修改表的模式,是異步的操作,可能需要花費(fèi)一定的時(shí)間booleantableExists(StringtableName)檢查表是否存在用法用例:HBaseAdminadmin=newHBaseAdmin(config);admin.disableTable("tablename")②HBaseConfiguration關(guān)系:org.apache.hadoop.HBase.HBaseConfiguration作用:對(duì)HBase進(jìn)行配置。它的返回值、函數(shù)和描述信息如表4-9所示。表4-9返回值、函數(shù)和描述信息返回值函數(shù)描述voidaddResource(Pathfile)通過(guò)給定的路徑所指的文件來(lái)添加資源voidclear()清空所有已設(shè)置的屬性stringget(Stringname)獲取屬性名對(duì)應(yīng)的值StringgetBoolean(Stringname,boolean獲取為boolean類型的屬性值,如果其屬性值類型部位boolean,則返回默認(rèn)屬性值voidset(Stringname,Stringvalue)通過(guò)屬性名來(lái)設(shè)置值voidsetBoolean(Stringname,boolean設(shè)置boolean類型的屬性值用法用例:HBaseConfigurationhconfig=newHBaseConfiguration();hconfig.set("perty.clientPort","2181");該方法設(shè)置了"perty.clientPort"的端口號(hào)為2181。一般情況下,HBaseConfiguration會(huì)使用構(gòu)造函數(shù)進(jìn)行初始化,然后在使用其他方法。③HTableDescriptor關(guān)系:org.apache.hadoop.HBase.HTableDescriptor作用:包含了表的名字極其對(duì)應(yīng)表的列族。它的返回值、函數(shù)和描述信息如表4-10所示。表4-10返回值、函數(shù)和描述信息返回值函數(shù)描述voidaddFamily(HColumnDescriptor)添加一個(gè)列族HColumnDescriptorremoveFamily(byte[]column)移除一個(gè)列族byte[]getName()獲取表的名字byte[]getvalue(byte[]key)獲取屬性的值voidsetValue(Stringkey,Stringvalue)設(shè)置屬性的值用法用例:HTableDescriptorhtd=newHTableDescriptor(table);htd.addFamily(newHcolumnDescriptor("family"));在上述例子中,通過(guò)一個(gè)HColumnDescriptor實(shí)例,為HTableDescriptor添加了一個(gè)列族:family,該方法設(shè)置了"perty.clientPort"的端口號(hào)為2181。一般情況下,HBaseConfiguration會(huì)使用構(gòu)造函數(shù)進(jìn)行初始化,然后在使用其他方法。④HColumnDescriptor關(guān)系:org.apache.hadoop.HBase.HColumnDescriptor作用:維護(hù)著關(guān)于列族的信息,例如版本號(hào),壓縮設(shè)置等。它通常在創(chuàng)建表或者為表添加列族的時(shí)候使用。列族被創(chuàng)建后不能直接修改,只能通過(guò)刪除然后重新創(chuàng)建的方式。列族被刪除的時(shí)候,列族里面的數(shù)據(jù)也會(huì)同時(shí)被刪除。它的返回值、函數(shù)和描述信息如表4-11所示。表4-11返回值、函數(shù)和描述信息返回值函數(shù)描述byte[]getName()獲取列族的名字byte[]getValue(byte[]key)獲取對(duì)應(yīng)的屬性的值voidsetvalue(Stringkey,Stringvalue)設(shè)置對(duì)應(yīng)屬性的值用法用例:HTableDescriptorhtd=newHTableDescriptor(tablename);HColumnDescriptorcol=newHColumnDescriptor("content:");htd.addFamily(col);此例添加了一個(gè)content的列族。⑤HTable關(guān)系:org.apache.hadoop.HBase.client.HTable作用:可以用來(lái)和HBase的表直接通信。此方法對(duì)于更新操作來(lái)說(shuō)是非線程安全的。它的返回值、函數(shù)和描述信息如表4-12所示。表4-12返回值、函數(shù)和描述信息返回值函數(shù)描述voidcheckAdnPut(byte[]row,byte[]family,自動(dòng)的檢查row/family/qualifier是否與給定的值匹配voidclose()釋放所有的資源或掛起內(nèi)部緩沖區(qū)中的更新Booleanexists(Getget)檢查Get實(shí)例所指定的值是否存在于HTable的列中Resultget(Getget)獲取指定行的某些單元格所對(duì)應(yīng)的值byte[][]getEndKeys()獲取當(dāng)前一打開(kāi)的表每個(gè)區(qū)域的結(jié)束鍵值ResultScannergetScanner(byte[]family)獲取當(dāng)前給定列族的scanner實(shí)例HTableDescriptogetTableDescriptor()獲取當(dāng)前表的HTableDescriptor實(shí)例byte[]getTableName()獲取表名staticbooleanisTableEnabled(HBaseConfigurationconf,StringtableName)檢查表是否有效voidput(Putput)向表中添加值用法用例:HTabletable=newHTable(conf,Bytes.toBytes(tablename));ResultScannerscanner=table.getScanner(family);⑥Put關(guān)系:org.apache.hadoop.HBase.client.Put作用:用來(lái)對(duì)單個(gè)行執(zhí)行添加操作它的返回值、函數(shù)和描述信息如表4-13所示。圖表4-13返回值、函數(shù)和描述信息返回值函數(shù)描述Putadd(byte[]family,byte[]qualifier,byte[]value)將指定的列和對(duì)應(yīng)的值添加到Put實(shí)例中Putadd(byte[]family,byte[]qualifier,longts,byte[]value)將制定的列和對(duì)應(yīng)的值及時(shí)間戳添加到Put實(shí)例中byte[]getRow()獲取Put實(shí)例的行RowLockgetRowLock()獲取Put實(shí)例的行鎖longgetTimeStamp()獲取Put實(shí)例的時(shí)間戳booleanisEmpty()檢查familyMap是否為空PutsetTimeStamp(longtimeStamp)設(shè)置Put實(shí)例的時(shí)間戳用法用例:HTabletable=newHTable(conf,Bytes.toBytes(tablename));Putp=newPut(brow);//為指定行創(chuàng)建一個(gè)Put操作p.add(family,qualifier,value);table.put(p);⑦Get關(guān)系:org.apache.hadoop.HBase.client.Get作用:用來(lái)獲取單個(gè)行的相關(guān)信息它的返回值、函數(shù)和描述信息如圖表4-14所示。表4-14返回值、函數(shù)和描述信息返回值函數(shù)描述GetaddColumn(byte[]family,byte[]qualifier)獲取指定列族和列修飾符對(duì)應(yīng)的列GetaddFamily(byte[]family)通過(guò)指定的列族獲取其對(duì)應(yīng)列的所有列GetsetTimeRange(longminStamp,longmaxStamp)獲取指定取件的列的版本號(hào)GetsetFilter(Filterfilter)當(dāng)執(zhí)行Get操作時(shí)設(shè)置服務(wù)器端的過(guò)濾器用法用例:HTabletable=newHTable(conf,Bytes.toBytes(tablename));Getg=newGet(Bytes.toBytes(row));⑧Result關(guān)系:org.apache.hadoop.HBase.client.Result。作用:存儲(chǔ)Get或者Scan操作后獲取表的單行值。使用此類提供的方法可以直接獲取值
或者各種Map結(jié)構(gòu)(Key-value對(duì))。它的返回值、函數(shù)和描述信息如表4-15所示。表4-15返回值、函數(shù)和描述信息返回值函數(shù)描述booleancontainsColumn(byte[]family,bytequalifier)檢查指定的列是否存在NavigableMap<byte[],byte[]>getFamilyMap(byte[]family)獲取對(duì)應(yīng)列族所包含的修飾符與值的鍵值對(duì)byte[]getValue(byte[]family,byte[]qualifier)獲取對(duì)應(yīng)列的最新值5.實(shí)訓(xùn)步驟(1)準(zhǔn)備工作①依次啟動(dòng)HDFS、ZooKeeper、HBase,查看進(jìn)程如圖4-51所示。②導(dǎo)入依賴本次編程環(huán)境繼續(xù)使用實(shí)訓(xùn)2.3的環(huán)境,但編寫HBase程序需要引入相關(guān)的jar包,所以需要先解壓HBase的安裝包到Windows本地,然后再導(dǎo)入hbase-shaded-client-2.5.0.jar包。操作如圖4-52所示。圖4-52導(dǎo)入HBase的依賴(2)編寫代碼新建一個(gè)HBaseDemo類,完整代碼如下:packagecom.bigdata;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.hbase.*;
importorg.apache.hadoop.hbase.client.*;
importorg.apache.hadoop.hbase.filter.Filter;
importorg.apache.hadoop.hbase.filter.FilterList;
importorg.apache.hadoop.hbase.filter.SingleColumnValueFilter;
importorg.apache.hadoop.hbase.util.Bytes;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
publicclassHBaseDemo{
publicstaticvoidmain(String[]args){
Configurationconfiguration=HBaseConfiguration.create();
Connectionconnection=null;
configuration.set("HBase.zookeeper.quorum","master:2181,slave1:2181,slave2:2181");
configuration.set("zookeeper.znode.parent","/hbase");
try{
connection=ConnectionFactory.createConnection(configuration);
//獲得Admin對(duì)象
Adminadmin=connection.getAdmin();
Stringtbl="hbase";
TableNametableName=TableName.valueOf(tbl);
//一、表不存在時(shí)創(chuàng)建表
if(!admin.tableExists(tableName)){
//創(chuàng)建表描述對(duì)象
TableDescriptorBuildertableDescriptor=TableDescriptorBuilder.newBuilder(tableName);
//列簇1
ColumnFamilyDescriptorfamilyColumn1=ColumnFamilyDescriptorBuilder.newBuilder("c1".getBytes()).build();
//列簇2
ColumnFamilyDescriptorfamilyColumn2=ColumnFamilyDescriptorBuilder.newBuilder("c2".getBytes()).build();
tableDescriptor.setColumnFamily(familyColumn1);
tableDescriptor.setColumnFamily(familyColumn2);
//用Admin對(duì)象創(chuàng)建表
admin.createTable(tableDescriptor.build());
}
//關(guān)閉Admin對(duì)象
admin.close();
//二、向表put數(shù)據(jù)
//獲得table接口
Tabletable=connection.getTable(tableName);
//添加的數(shù)據(jù)對(duì)象集合
List<Put>putList=newArrayList<Put>();
//添加10行數(shù)據(jù)
for(inti=0;i<10;i++){
//put對(duì)象(rowKey)
StringrowKey="myKey"+i;
Putput=newPut(rowKey.getBytes());
//添加列簇,列名,值
put.addColumn("c1".getBytes(),"c1tofamily1".getBytes(),("100"+i).getBytes());
put.addColumn("c1".getBytes(),"c2tofamily1".getBytes(),("200"+i).getBytes());
put.addColumn("c2".getBytes(),"c1tofamily2".getBytes(),("300"+i).getBytes());
putList.add(put);
}
table.put(putList);
table.close();
//查看對(duì)象
Scanscan=newScan();
//限定rowKey查詢范圍
scan.withStartRow("myKey0".getBytes());
scan.withStopRow("myKey9".getBytes());
//只查詢c1:c1tofamily1列
scan.addColumn("c1".getBytes(),"c1tofamily1".getBytes());
//過(guò)濾器集合
FilterListfilterList=newFilterList();
//查詢符合條件c1:c1tofamily1==1007的記錄
Filterfilter1=newSingleColumnValueFilter("c1".getBytes(),"c1tofamily1".getBytes(),CompareOperator.EQUAL,"1007".getBytes());
filterList.addFilter(filter1);
scan.setFilter(filterList);
ResultScannerresults=table.getScanner(scan);
for(Resultresult:results){
System.out.println("獲得到rowKey:"+newString(result.getRow()));
for(Cellcell:result.rawCells()){
System.out.println("列簇:"+
Bytes.toString(cell.getFamilyArray(),cell.getFam
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《大學(xué)物理(上冊(cè))》課件-第1章
- 2025-2030全球車輛燃油油位計(jì)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球電積銅行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)直接空氣捕獲和儲(chǔ)存(DACS)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球多層土壤傳感器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)阻燃塑料薄膜和片材行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球醫(yī)用手指康復(fù)訓(xùn)練儀行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球化學(xué)谷物熏蒸劑行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)智慧教育公共服務(wù)平臺(tái)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)工業(yè)膠囊填充設(shè)備行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年度院感管理工作計(jì)劃(后附表格版)
- 勵(lì)志課件-如何做好本職工作
- 化肥銷售工作計(jì)劃
- 2024浙江華數(shù)廣電網(wǎng)絡(luò)股份限公司招聘精英18人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024年山東省濟(jì)南市中考英語(yǔ)試題卷(含答案解析)
- 2024年社區(qū)警務(wù)規(guī)范考試題庫(kù)
- 2025中考英語(yǔ)作文預(yù)測(cè):19個(gè)熱點(diǎn)話題及范文
- 第10講 牛頓運(yùn)動(dòng)定律的綜合應(yīng)用(一)(講義)(解析版)-2025年高考物理一輪復(fù)習(xí)講練測(cè)(新教材新高考)
- 靜脈治療護(hù)理技術(shù)操作標(biāo)準(zhǔn)(2023版)解讀 2
- 2024年全國(guó)各地中考試題分類匯編(一):現(xiàn)代文閱讀含答案
- GB/T 30306-2024家用和類似用途飲用水處理濾芯
評(píng)論
0/150
提交評(píng)論