版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、版權(quán)所有 2015 華為技術(shù)有限公司HBase二次開發(fā)第1頁.前言.第1頁HBase是一個高可靠性、高性能、面向列、可伸縮的分布式數(shù)據(jù)庫,設(shè)計目標(biāo)是用來解決關(guān)系型數(shù)據(jù)庫在處理海量數(shù)據(jù) 時的局限性。本章主要介紹HBase的接口以及二次開發(fā)的使用指導(dǎo)。目錄.第2頁1.HBase常用接口介紹常用Shell接口常用Java接口HBase常用接口.第3頁客戶端使用主要方式:HBase ShellHBase的命令行工具,最簡單的接口,適合 HBase管理使用。Java API HBase客戶端程序通過底層RPC接口與HBase集群進行通信,客戶程序直接集成HBase的Java包,通過調(diào)用相關(guān)API即可完成
2、操作。其余接口:REST 接口REST(Representational State Transfer)表述性狀態(tài)轉(zhuǎn) 移接口。Thrift接口Thrift 是一個基于靜態(tài)代碼生成的跨語言的RPC協(xié)議棧實 現(xiàn),它可以生成包括C+, Java, Python, Ruby, PHP 等主 流語言的代碼,這些代碼實現(xiàn)了 RPC 的協(xié)議層和傳輸層 功能,從而讓用戶可以集中精力于服務(wù)的調(diào)用和實現(xiàn)。Avro接口Avro是一個數(shù)據(jù)序列化系統(tǒng),設(shè)計用于支持大批量數(shù)據(jù) 交換的應(yīng)用。目錄.第4頁1.HBase常用接口介紹常用Shell接口常用Java接口常用Shell接口 連接通過/hbase shell來連接正在
3、運行的HBase Shell客戶端用法:/ 安全登錄,在進入hbase shell客戶端之前,需要進行安裝客戶端和用戶登錄的準(zhǔn)備工作,具體需要參考CPI文檔中安 裝與使用客戶端章節(jié)/進入HBase shell客戶端# .bin/hbase shellHBase Shell; enter help for list of supported commands. Type exit to leave the HBase ShellVersion 0.94.0, r, Sun Aug 26 22:12:56 CST 2012hbase(main):001:0.第5頁常用Shell接口 創(chuàng)建表創(chuàng)建表時
4、,可以選擇多個參數(shù),但表名和列族名是必須的參數(shù),其它參數(shù)還包括版本數(shù)、TTL 以及預(yù)分Region建表的key數(shù)組等用法:hbase create t1, NAME = f1, VERSIONS = 5hbase create t1, NAME = f1, NAME = f2, NAME = f3hbase # The above in shorthand would be the following: hbase create t1, f1, f2, f3hbase create t1, NAME = f1, VERSIONS = 1, TTL = 2592000, BLOCKCACHE =
5、 true hbase create t1, f1, SPLITS = 10, 20, 30, 40hbase create t1, f1, SPLITS_FILE = splits.txt hbase # Optionally pre-split the table into NUMREGIONS, usinghbase # SPLITALGO (HexStringSplit, UniformSplit or classname)hbase create t1, f1, NUMREGIONS = 15, SPLITALGO = HexStringSplit.第6頁常用Shell接口 插入一行
6、數(shù)據(jù)PutPut數(shù)據(jù)時,必選參數(shù)是表名、RowKey、列名(包括列族和列名)和值,可選參數(shù)包括時間戳用法:hbase put t1, r1, c1, value, ts1例如,向表test中put三條數(shù)據(jù),并通過count命令計算test表中的數(shù)據(jù)的條數(shù) 示例:/向表test中put數(shù)據(jù),RowKey為rowkey1,列族名為cf,列名為qualifier1,值為value1.第7頁hbase(main):002:0 0 row(s) in 0.5940 hbase(main):003:0 0 row(s) in 0.0080/指定時間戳為3 hbase(main):011:0 0 row(s
7、) in 0.0510 hbase(main):013:0 3 row(s) in 0.0160put test,rowkey1,cf:qualifier1,value1 secondsput test,rowkey2,cf:qualifier2,value2 secondsput test,rowkey3,cf:qualifier3,value3,3 secondscount test seconds常用Shell接口 讀取一行數(shù)據(jù)Get查詢一行數(shù)據(jù)時,必選參數(shù)是表名和RowKey,可選參數(shù)包括列名(包括列族和列名)、時間戳、版本數(shù)等用法:.第8頁hbase hbase hbase hbas
8、e hbase hbaseget t1,get t1,get t1,get t1,get t1,get t1,r1 r1,r1,r1,r1,r1,TIMERANGE= ts1, ts2= c1= c1, c2, c3=COLUMNCOLUMNCOLUMNCOLUMNc1,c1,TIMESTAMP TIMERANGE= ts1= ts1,ts2,VERSIONS = 4hbase get VERSIONS = 4t1,r1,COLUMN = c1,c1c1, c2c1, c2TIMESTAMP= ts1,hbase hbase hbaseget t1,get t1,get t1,r1,r1,r1
9、,常用Shell接口 讀取多行數(shù)據(jù)Scan查詢多行數(shù)據(jù),必選參數(shù)是表名,可選參數(shù)包括列名(包括列族和列名)、起止Key、Filter用法:/查詢元表.第9頁hbase hbase hbase hbase hbasescan scan scan scan scan.META.META., COLUMNS = info:regioninfot1,t1,t1,COLUMNS = c1, c2, LIMIT = 10, STARTROW = xyzCOLUMNS = c1, TIMERANGE = 1303668804, 1303668904FILTER = (PrefixFilter (row2)
10、AND (QualifierFilter s(=,binary:xyz)AND (TimestampsFilter hbase scan t1,( 123, 456)FILTER =org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0) hbase scan t1, COLUMNS = c1, c2, CACHE_BLOCKS = false hbase scan t1, RAW = true, VERSIONS = 10常用Shell接口 其他常用命令HBase還提供了一些其它的Shell API,包括general、d
11、dl、dml、tools、replication和security六組,每 組又包括多個Shell命令。每組命令和每個命令的用法均可以通過help查詢其用法COMMAND GROUPS:Group name: generalCommands: status, version, whoamiGroup name: ddlCommands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, is_disabled,
12、 is_enabled, list, show_filtersGroup name: dmlCommands: count, delete, deleteall, get, get_counter, incr, put,scan, truncateGroup name: toolsCommands: assign, balance_switch, balancer, close_region, compact, flush, hlog_roll, major_compact, move, split, unassign, zk_dumpGroup name: replicationComman
13、ds: add_peer, disable_peer, enable_peer, list_peers, remove_peer, start_replication, stop_replicationGroup name: securityCommands: grant, revoke, user_permission.第10頁目錄.第11頁1.HBase常用接口介紹常用Shell接口常用Java接口在開始使用HBase Java API之前,需要做幾項準(zhǔn)備工作: 要求JDK版本1.7及以上版本。HBase開發(fā)相關(guān)的jar包(包括ZooKeeper、HDFS、MapReduce等)需要和 H
14、Base集群節(jié)點上的版本保持一致。在hosts文件中添加HBase服務(wù)器節(jié)點的IP和HostName的映射關(guān)系。HBase采用的接口與Apache HBase保持一致,請參見:/apidocs/index.html.第12頁工程搭建 準(zhǔn)備工作1. 獲取客戶端安裝包中的配置文件core-site.xml、hbase-site.xml、hdfs- site.xml并放置在到Java工程中的conf目錄下。并將conf目錄添加到classpath下。 2. 獲取客戶端安裝包中的HBase開發(fā)依賴的jar文件,并添加到工程的classpath路 徑下。3.
15、具體操作請參考CPI文檔中開發(fā)環(huán)境準(zhǔn)備的章節(jié)。在Eclipse工具中,單擊“New Java Project”,輸入工程名,單擊“Finish” 即可創(chuàng)建Java工程。下載客戶端安裝包配置開發(fā)環(huán)境創(chuàng)建Java工程開發(fā)應(yīng)用編譯運行/ 初始化配置信息Configuration conf = HBaseConfiguration.create();/ 創(chuàng)建表HBaseAdmin admin = new HBaseAdmin(conf);admin.createTable(htd);/ 插入一行數(shù)據(jù)HTable table = new HTable(conf, tableName);Put put =
16、 new Put(Bytes.toBytes(012005000201); put.add(FAMILIES, Bytes.toBytes(name), Bytes.toBytes(張三); put.add(FAMILIES, Bytes.toBytes(gender), Bytes.toBytes(男);put.add(FAMILIES, Bytes.toBytes(address), Bytes.toBytes(廣東省深圳市);table.put(put);工程搭建 準(zhǔn)備工作.第13頁/ 安全版本Configuration conf = HBaseConfiguration.create(
17、);conf.addResource(user-hbase.xml);.第14頁if (User.isHBaseSecurityEnabled(conf) conf.set(HBASE_KEYTAB_FILE,System.getProperty(user.dir) + File.separator + conf+ File.separator + conf.get(HBASE_KEYTAB_FILE);String krbfilepath = System.getProperty(user.dir) + File.separator+ conf + File.separator + krb5
18、.conf; System.setProperty(java.security.krb5.conf, krbfilepath);try ZKUtil.loginClient(conf, HBASE_KEYTAB_FILE, HBASE_KERBEROS_PRINCIPAL, InetAddress.getLocalHost().getCanonicalHostName();User.login(conf, HBASE_KEYTAB_FILE, HBASE_KERBEROS_PRINCIPAL,InetAddress.getLocalHost().getCanonicalHostName();
19、catch (IOException e) e.printStackTrace();通過調(diào)用HBaseConfiguration的 create()方法來實例化。否則,將 無法正確加載HBase中的相關(guān)配置 項常用Java接口 創(chuàng)建安全版本的Configuration實例通過HBaseAdmin的createTable方法來創(chuàng)建一張表,指定表名、列族名稱。創(chuàng)建表分為快速建表和預(yù)分Region建表,前 者表示創(chuàng)建表后整張表只有一個Region,隨 著數(shù)據(jù)量的增加會自動分裂成多個Region; 后者表示,創(chuàng)建表時預(yù)先分配多個Region, 此種方法建表可以提高寫入大量數(shù)據(jù)初期的 數(shù)據(jù)寫入速度示例:
20、/ 表名和列族名稱String tableName = myTable; String families = f1;/ 通過已有的Configuration對象實例化一個HBaseAdmin對象HBaseAdmin admin = new HBaseAdmin(config);/ 表的描述信息,指定表名、列族名稱HTableDescriptor tableDesc = newHTableDescriptor(tableName);tableDesc.addFamily(new HColumnDescriptor(familiesi);/ 不預(yù)分Region建表admin.createTable
21、(tableDesc);/ 預(yù)分Region建表的兩種方式:/ 指定起止RowKey和Region個數(shù);此時的起始RowKey為第一個Region的 endKey,結(jié)束key為最后一個Region的startKey。 admin.createTable(tableDesc, Bytes.toBytes(10),Bytes.toBytes(800000), 30);/ 指定RowKey數(shù)組,不包括第一個Region的startKey和最后一個Region的 endKey,因此Region個數(shù)等于數(shù)組長度+1/ 例如以下語句創(chuàng)建的表包括4個Region,各Region的起止key分別為,a), a
22、,k), k,z),z,),可以看成左閉右開區(qū)間,a屬于a,k)這個Region,k屬于k,z)這個 Region,z屬于z,)這個Region。byte keys = Bytes.toBytes(a), Bytes.toBytes(k), Bytes.toBytes(z);admin.createTable(tableDesc, keys);.第15頁常用Java接口 創(chuàng)建表開啟壓縮功能有利于減少HBase中數(shù)據(jù)存儲 的冗余數(shù)據(jù),HBase中有兩類壓縮機制, HFile文件級別的壓縮Compress和 DataBlockEncode前綴壓縮。HBase中數(shù)據(jù) 存儲格式是HFile,文件級別的
23、壓縮既是針對 HFile的壓縮,前綴壓縮式針對HFile中數(shù)據(jù) 主要部分DataBlock進行壓縮。 使用HBase壓縮功能的方法是在創(chuàng)建表時, 針對列族在HColumnDescriptor類中通過接 口設(shè)置示例:columnDesc = new HColumnDescriptor(familiesi);/ 設(shè)置前綴壓縮,HBase提供了PREFIX、DIF、FAST_DIFF三種前綴壓 縮方法 columnDesc.setDataBlockEncoding(DataBlockEncoding.FAST_DIFF);/ 設(shè)置文件壓縮,文件壓縮通常需要安裝壓縮算法共享庫,這里建議先先 通過/ o
24、rg.apache.hadoop.hbase.util.CompressionTest檢查一下壓縮算 法可用性columnDesc.setCompressionType(Algorithm.SNAPPY);tableDesc.addFamily(columnDesc);.第16頁常用Java接口 開啟壓縮方式HBase是一個面向列的數(shù)據(jù)庫,一行數(shù)據(jù), 可能對應(yīng)多個列族,而一個列族又可以對應(yīng) 多個列。通常,寫入數(shù)據(jù)的時候,我們需要 指定要寫入的列(含列族名稱和列名稱)。如果要往HBase表中寫入一行數(shù)據(jù),需要首 先構(gòu)建一個Put實例。Put中包含了數(shù)據(jù)的 RowKey值和指定列(含列族名稱和列名
25、稱) 的Value值,一個RowKey的Value值可以有 多個(即包含多個列)示例:/ 表的名稱為personprivate static final byte TABLENAME = Bytes.toBytes(person);/ 列族名稱的名稱為privateInfoprivate static final byte FAMILIES =Bytes.toBytes(privateInfo);.第17頁/ 列族privateInfo中有兩個列name和addressprivate static final byte qualifiers = Bytes.toBytes(name),Byte
26、s.toBytes(addres) ;/ 實例化一個put對象Put put = new Put(Bytes.toBytes(rowkey);put.add(FAMILIES, qualifiers0, Bytes.toBytes(values00 + i); put.add(FAMILIES, qualifiers0, Bytes.toBytes(values01 + i);/ 多個put存放到一個List中puts.add(put);/ 提交一次put數(shù)據(jù)請求hTable.put(puts);常用Java接口 插入數(shù)據(jù)Put從表中讀取一條數(shù)據(jù),首先需要實例化 該表對應(yīng)的HTable對象,然
27、后創(chuàng)建一個 Get對象。也可以為get對象設(shè)定參數(shù)值, 如列族的名稱和列的名稱。查詢結(jié)果的 該行數(shù)據(jù)存儲Result對象中,Result中 存儲了多個KeyValue對示例:HTable table = null;try table = new HTable(conf, tableName);Get get = new Get(rowKey.getBytes();/ 設(shè)定列族名和列名get.addColumn(family, qualifier);/ 設(shè)定列族名get.addFamily(family);Result result = table.get(get);for (KeyValue
28、kv : result.raw() System.out.println(kv.getRow() + + (kv.getFamily() + + (kv.getQualifier() + + kv.getTimestamp() + + kv.getValue() + ); catch (IOException e) / TODO finally if (null != table) try table.close(); catch (IOException e) / TODO.第18頁常用Java接口 讀取一行數(shù)據(jù)Get要從表中讀取數(shù)據(jù),首先需要實例化該表 對應(yīng)的HTable對象,然后創(chuàng)建一個
29、Scan對 象,并針對查詢條件設(shè)置scan的參數(shù)值, 為了提高查詢效率,最好指定StartKey和 EndKey。查詢結(jié)果的多行數(shù)據(jù)保存在 ResultScanner對象,每行數(shù)據(jù)以Result對 象形式存儲,Result中存儲了多個 KeyValue對示例:HTable table = null;ResultScanner rScanner = null; try table = new HTable(conf, tableName); Scan scan = new Scan(); scan.setStartRow(startRow); scan.setStopRow(stopRow);/
30、 重要參數(shù):每次RPC從服務(wù)端取回的記錄數(shù)scan.setCaching(1000);.第19頁rScanner = table.getScanner(scan);for (Result r = rScanner.next(); r != null; r = rScanner.next() for (KeyValue kv : r.raw() / TODO catch (IOException e) / TODO finally if (null != rScanner) rScanner.close();if (null != table) try table.close(); catch
31、(IOException e) / TODO常用Java接口 讀取多行數(shù)據(jù)Scan HBase Filter主要通過設(shè)置一些過濾條件,在 查詢(Scan)過程中進行Row級別的數(shù)據(jù)過濾。 可以設(shè)置RowKey過濾條件,也可以設(shè)置列名或 者列值的過濾條件。 HBase中提供了多種過濾器,這些過濾器都在 org.apache.hadoop.hbase.filter包中。單個過 濾器的使用,首先需要創(chuàng)建一個Scan對象,然后 設(shè)置該對象的Filter參數(shù)為過濾器對象。也可以多 個過濾器條件配合使用,采用FilterList。具體 HBase中提供了哪些filter,可以查詢API示例:Scan s
32、= new Scan();/ 前綴過濾器,查找RowKey以“132”開頭的行s.setFilter(new PrefixFilter(Bytes.toBytes(132);/ 查找符合條件的6行數(shù)據(jù)s.setFilter(new PageFilter(6);/ 多個過濾器結(jié)合使用FilterList list = new FilterList(Operator.MUST_PASS_ALL);list.addFilter(new SingleColumnValueFilter(family, qualifier,CompareOp.EQUAL, value); list.addFilter(n
33、ew PageFilter(6); s.setFilter(list);.第20頁常用Java接口 過濾器Filter示例:/ new IndexAdmin對象進行索引管理操作HBaseAdmin admin = new IndexAdmin(conf);.第21頁/ 創(chuàng)建表的Desc對象和列族對象String userTableName = testAddIndex;HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(userTableName); HColumnDescriptor hcd = new HColumnDescriptor(cf);htd.addFamily(hcd);/ 創(chuàng)建一個二級索引對象TableIndices tableIndices = new TableIndices(); tableIndices.addIndex(iSpec);IndexSpecification spec = new IndexSpecification(index1);spec.addIndexColumn(hcd, q1, ValueType.String, 10);/ 創(chuàng)建表和二級索引admin.createTable
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度年福建省高校教師資格證之高等教育心理學(xué)通關(guān)試題庫(有答案)
- 2024年熟食制品項目資金籌措計劃書代可行性研究報告
- 2024年造紙完成工段智能裝備項目資金申請報告代可行性研究報告
- 2024常年采購協(xié)議條款與條件示例
- 2024年度建材銷售協(xié)議格式
- 2024年專業(yè)門窗安裝服務(wù)協(xié)議模板
- 2024公司B棟生產(chǎn)車間租賃協(xié)議
- 員工基本行為準(zhǔn)則
- 銀行外匯便利化政策落實情況總結(jié)
- 2024年規(guī)范二手公寓房產(chǎn)交易協(xié)議書
- 微型計算機原理與應(yīng)用習(xí)題集及答案
- 河北省唐山市藥品零售藥店企業(yè)藥房名單目錄
- 喵喵老師制作 電子百拼的黑白電路圖
- DB34-T 4010-2021 水利工程外觀質(zhì)量評定規(guī)程-高清現(xiàn)行
- 《整改報告》模板
- 送達地址確認(rèn)書(樣本)
- 江蘇省歷屆中學(xué)生與社會作文大賽決賽試題及獲獎范文(完整版)資料
- 六年級數(shù)學(xué)上冊教案-分?jǐn)?shù)乘法整理與練習(xí) 蘇教版
- 《民航服務(wù)禮儀》項目五 地面服務(wù)禮儀
- 營業(yè)執(zhí)照借用免責(zé)協(xié)議
- 小學(xué)道德與法治人教三年級上冊第三單元安全護我成長-《遭遇陌生人》教案
評論
0/150
提交評論