開場白:
Hive與HBase的整合功能的實(shí)現(xiàn)是利用兩者本身對外的API接口互相進(jìn)行通信,相互通信主要是依靠hive_hbase-handler.jar工具類 (
Hive Storage Handlers
), 大致意思如圖所示:
口水:
?對 hive_hbase-handler.jar 這個(gè)東東還有點(diǎn)興趣,有空來磋磨一下。
一、2個(gè)注意事項(xiàng):
1、需要的軟件有 Hadoop、Hive、Hbase、Zookeeper,Hive與HBase的整合對Hive的版本有要求,所以不要下載.0.6.0以前的老版本,Hive.0.6.0的版本才支持與HBase對接,因此在Hive的lib目錄下可以看見多了hive_hbase-handler.jar這個(gè)jar包,他是Hive擴(kuò)展存儲的Handler ,HBase 建議使用 0.20.6的版本,這次我沒有啟動(dòng)HDFS的集群環(huán)境,本次所有測試環(huán)境都在一臺機(jī)器上。
?????
2、運(yùn)行Hive時(shí),也許會出現(xiàn)如下錯(cuò)誤,表示你的JVM分配的空間不夠,
錯(cuò)誤信息
如下:
Invalid maximum heap size: -Xmx4096m
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine.
解決方法:
/work/hive/bin/ext# vim util/execHiveCmd.sh 文件中第33行
修改,
HADOOP_HEAPSIZE=4096
為
HADOOP_HEAPSIZE=256
另外,在 /etc/profile/ 加入 export $HIVE_HOME=/work/hive
二、啟動(dòng)運(yùn)行環(huán)境
1啟動(dòng)Hive
hive –auxpath /work/hive/lib/hive_hbase-handler.jar,/work/hive/lib/hbase-0.20.3.jar,/work/hive/lib/zookeeper-3.2.2.jar -hiveconf hbase.master=127.0.0.1:60000
加載 Hive需要的工具類,并且指向HBase的master服務(wù)器地址,我的HBase master服務(wù)器和Hive運(yùn)行在同一臺機(jī)器,所以我指向本地。
2啟動(dòng)HBase
/work/hbase/bin/hbase master start
3啟動(dòng)Zookeeper
/work/zookeeper/bin/zkServer.sh start
三、執(zhí)行
在Hive中創(chuàng)建一張表,相互關(guān)聯(lián)的表
CREATE TABLE hbase_table_1(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") TBLPROPERTIES ("
hbase.table.name
" = "xyz");
在運(yùn)行一個(gè)在Hive中建表語句,并且將數(shù)據(jù)導(dǎo)入
建表
????CREATE TABLE pokes (foo INT, bar STRING);
數(shù)據(jù)導(dǎo)入
????LOAD DATA LOCAL INPATH '/work/hive/examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;
在Hive與HBase關(guān)聯(lián)的表中 插入一條數(shù)據(jù)
????INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=98;
運(yùn)行成功后,如圖所示:
插入數(shù)據(jù)時(shí)采用了MapReduce的策略算法,并且同時(shí)向HBase寫入,如圖所示:
在HBase shell中運(yùn)行 scan 'xyz' 和describe "xyz" 命令,查看表結(jié)構(gòu),運(yùn)行結(jié)果如圖所示:
xyz是通過Hive在Hbase中創(chuàng)建的表,剛剛在Hive的建表語句中指定了映射的屬性? "hbase.columns.mapping" = ":key,cf1:val"? 和 在HBase中建表的名稱? " hbase.table.name " = "xyz"
在hbase在運(yùn)行put命令,插入一條記錄
????
put 'xyz','10001','cf1:val','
www.javabloger.com
'
在hive上運(yùn)行查詢語句,看看剛剛在hbase中插入的數(shù)據(jù)有沒有同步過來,
????select * from hbase_table_1 WHERE key=10001;
如圖所示:
最終的效果
????以上整合過程和操作步驟已經(jīng)執(zhí)行完畢,現(xiàn)在
Hive中添加記錄HBase中有記錄添加,同樣你在HBase中添加記錄Hive中也會添加
, 表示Hive與HBase整合成功,對海量級別的數(shù)據(jù)我們是不是可以在HBase寫入,在Hive中查詢 喃?因?yàn)?
HBase 不支持
復(fù)雜的查詢,但是HBase可以作為基于 key 獲取一行或多行數(shù)據(jù),或者掃描數(shù)據(jù)區(qū)間,以及過濾操作。而
復(fù)雜的
查詢可以讓
Hive
來完成
,一個(gè)作為存儲的入口(HBase),一個(gè)作為查詢的入口(Hive)。如下圖示。
????
????
????呵呵,見笑了,以上只是我面片的觀點(diǎn)。
先這樣,稍后我將繼續(xù)更新,感謝你的閱讀。
??
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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