hive 集成hbase 笔记
Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供完整的sql查詢功能,可以將sql語句轉(zhuǎn)換為
MapReduce任務(wù)進(jìn)行運(yùn)行。其優(yōu)點(diǎn)學(xué)習(xí)成本低,可以通過類SQL語句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì),不必開發(fā)專門的MapReduce應(yīng)用,
十分適合數(shù)據(jù)倉庫的統(tǒng)計(jì)分析。Hive與HBase的整合功能的實(shí)現(xiàn)是利用兩者本身對(duì)外的API接口互相進(jìn)行通信,相互通信主要是依靠hive_hbase-handler.jar工具類.
Hive Hbase整合 見官網(wǎng) Hive HBase Integration:https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration?。
具體步驟整理如下:
集成步驟:
hbase 版本為 0.96.0 hive 0.12.0
1,首先將hbase-0.94.6.1/ 目錄下的? hbase-0.94.6.1.jar 和 hbase-0.94.6.1/lib下的 zookeeper-3.3.5.jar復(fù)制到hive/lib目錄下。
??? 注意:如果hive/lib下已經(jīng)存在這兩個(gè)文件的其他版本(例如zookeeper-3.3.3.jar),建議刪除后使用hbase下的相關(guān)版本.
2,在hive/conf下hive-site.xml文件中添加如下的內(nèi)容:
?如果hive/conf 目錄下沒有hive-site.xml 則把此目錄下的hive-default.xml.template拷貝一份并命名 為hive-site.xml。
<property><name>hive.aux.jars.path</name> <value>file:///root/hive-0.11.0/lib/hive-hbase-handler-0.11.0.jar,file:///root/hive-0.11.0/lib/hbase-0.94.6.1.jar,file:///root/hive-0.11.0/lib/zookeeper-3.3.5.jar</value> </property>?
3. 拷貝hbase-0.96.0.jar到所有hadoop節(jié)點(diǎn)(包括master)的hadoop/lib下。?
4. 拷貝hbase/conf下的hbase-site.xml文件到所有hadoop節(jié)點(diǎn)(包括master)的hadoop/conf下
注意,如果3,4兩步跳過的話,運(yùn)行hive時(shí)很可能出現(xiàn)如下錯(cuò)誤:
FAILED: Error in metadata: MetaException(message:org.apache.hadoop.hbase.MasterNotRunningException: ubuntu.ubuntu-domain:60000
?? ?at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getMaster(HConnectionManager.java:394)
?? ?at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:83)
?? ?at org.apache.hadoop.hive.hbase.HBaseStorageHandler.getHBaseAdmin(HBaseStorageHandler.java:74)
?? ?at org.apache.hadoop.hive.hbase.HBaseStorageHandler.preCreateTable(HBaseStorageHandler.java:158)
?? ?at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createTable(HiveMetaStoreClient.java:344)
?
?? 不要忘記第3 4步,我曾經(jīng)忘了這一步? 搞了半天!
?
現(xiàn)在可以嘗試啟動(dòng)Hive了。單節(jié)點(diǎn)啟動(dòng):
1? > bin/hive -hiveconf hbase.master=localhost:60000
集群?jiǎn)?dòng):
1 > bin/hive -hiveconf hbase.zookeeper.quorum=slave1,slave2,slave3,slave4
測(cè)試:
?5,測(cè)試:
? A, 建立關(guān)聯(lián)表,這里我們要查詢的表在hbase中已經(jīng)存在所以,使用CREATE EXTERNAL TABLE來建立,如下:
? CREATE EXTERNAL TABLE hbase_table_1(key string, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = "data:1") TBLPROPERTIES("hbase.table.name" = "hbase_test");?
hbase.columns.mapping指向?qū)?yīng)的列族;多列時(shí),data:1,data:2;多列族時(shí),data1:1,data2:1;?
?hbase.table.name指向?qū)?yīng)的表;hbase_table_2(key string, value string),這個(gè)是關(guān)聯(lián)表。
我們看一下HBase中要查詢的表的結(jié)構(gòu):
? hbase(main):001:0> describe 'hbase_test' DESCRIPTION ENABLED {NAME => 'hbase_test', FAMILIES => [{NAME => 'data', COMPRESSION => 'NONE', true VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]} 1 row(s) in 0.0810 seconds hbase(main):002:0>?
看一下Hbase表中的數(shù)據(jù):
?
hbase(main):002:0> scan 'hbase_test' ROW COLUMN+CELL row11 column=data:1, timestamp=1300847098583, value=value11 row12 column=data:1, timestamp=1300849056637, value=value12 row21 column=data:2, timestamp=1300847106880, value=value21 3 row(s) in 0.0160 seconds hbase(main):003:0>?
列族:data:1、data:2兩個(gè), Key:row1、row12、row21,alue:value1、value12、value21
?
?hbase_table_1(key string, value string)中對(duì)應(yīng)的test表中的row,value字段對(duì)應(yīng)的是hbase_test表中的value
現(xiàn)在可以來看看查詢結(jié)果了。
我們?cè)趆ive命令行中先查看一下hbase_table_1:
? hive> select * from hbase_table_1; OK row11 value11 row12 value12 Time taken: 0.197 seconds hive>?
對(duì)比一下hbase_test表中的列族為data:1的數(shù)據(jù): row11 column=data:1, timestamp=1300847098583, value=value11 row12 column=data:1, timestamp=1300849056637, value=value12?
和查詢結(jié)果相符。
?
?
B,創(chuàng)建hbase識(shí)別的數(shù)據(jù)庫:
CREATE TABLE test_hbase(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") TBLPROPERTIES ("hbase.table.name" = "test_hive");?
hbase.table.name 定義在hbase的table名稱,hbase.columns.mapping 定義在hbase的列族。
?
在hbase中查看表是否創(chuàng)建成功:
hbase(main):004:0> list TABLE hbase_test test_hive1 row(s) in 0.0110 secondshbase(main):005:0> describe 'test_hive' DESCRIPTION ENABLED {NAME => 'test_hive', FAMILIES => [{NAME => 'cf1', true BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', CO MPRESSION => 'NONE', VERSIONS => '3', TTL => '21474 83647', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]} 1 row(s) in 0.0300 seconds?
導(dǎo)入數(shù)據(jù):我們不能直接使用load data來將數(shù)據(jù)導(dǎo)入到剛才創(chuàng)建的test_hbase表中,我們可以通過insert overwrite的方式實(shí)現(xiàn)數(shù)據(jù)的插入。
?
insert overwrite table test_hbase select * from test_join1;
在HBase中查看通過hive導(dǎo)入的數(shù)據(jù)是否成功scan 'test_hive'。
scan 'test_hive' ROW COLUMN+CELL 1 column=cf1:val, timestamp=1331278861290, value=SF 2 column=cf1:val, timestamp=1331278861290, value=DANE 3 column=cf1:val, timestamp=1331278861290, value=WANG 4 column=cf1:val, timestamp=1331278861290, value=JULY 5 column=cf1:val, timestamp=1331278861260, value=EVA 6 column=cf1:val, timestamp=1331278861260, value=USTC 6 row(s) in 0.6230 seconds?
?
遇到的錯(cuò)誤:
hive> show tables;
FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask?
FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClientFAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
debug 模式重新啟動(dòng) hive,? 運(yùn)行命令:
運(yùn)行命令:
hive> show tables;
出現(xiàn)下面類似的錯(cuò)誤:
hive error xsdb6 hive another instance of derby may have already booted the
解決方法:
到 hive-0.11.0 目錄下把文件 夾 metestore_db 刪除,重新啟動(dòng) hive 即可 解決問題。
不過也可以 不使用默認(rèn)的內(nèi)嵌數(shù)據(jù)庫derby,采用mysql作為統(tǒng)計(jì)的存儲(chǔ)信息。詳情移步到
點(diǎn)擊打開鏈接
好,先到這。
參考鏈接:
http://blog.csdn.net/daniel_ustc/article/details/12795627
http://blog.csdn.net/jiedushi/article/details/7325292
http://victorzhzh.iteye.com/blog/972406
轉(zhuǎn)載于:https://www.cnblogs.com/qxwandy/p/3711018.html
總結(jié)
以上是生活随笔為你收集整理的hive 集成hbase 笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java排序集锦
- 下一篇: CLOB/BOLB与String互转