hive-hbase-handler方式導入hive表數據到hbase表中


偶然想到hbase特性是字段可擴張,查詢效率搞,hive是字段定死查詢走MR離線,hbase-hive映射表,可以hive導數據出來做分析,hbase數據做快速查詢。例如做分區表的情況下,hive不定對字段進行定位查詢落到哪一個分區,可以試試用hbase放到rowkey進行批量get出來更新,會很快,不過涉及到寫java。寫這個文章記錄下,找時間做下實踐
 
Hive與HBase的整合功能的實現是利用兩者本身對外的API接口互相進行通信,相互通信主要是依靠hive-hbase-handler.jar工具類 ;
hive-hbase-handler.jar在hive的lib包中而不是在hbase的lib中,hive0.6版本以后;
創建hive表的同時創建hbase表,刪除 hive表的同時也會刪除對應的hbase表。
 
使用前提:配置好hive和hbase對應的CDH版本,本案例使用的hive版本是 hive-0.12.0-cdh5.0.0,HBase使用的版本是 hbase-0.96.1.1-cdh5.0.0
 
添加$HIVE_HOME/conf/hive-env.sh配置屬性
export HIVE_AUX_JARS_PATH=/home/hadoop/app/hbase-0.96.1.1-cdh5.0.0/lib

啟動hive:推薦使用$HIVE_HOME/bin/hive -hiveconf hbase.zookeeper.quorum=hadoop000 -hiveconf hive.root.logger=DEBUG,console啟動,可以看到更加詳細的日志信息

案例一:操作簡單表單cf

創建hive-hbase表:

CREATE TABLE hive_hbase_table_kv(key string, value string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "hbase_hive_table_kv");
key與:key對應
value與:val對應
hbase_hive_table_kv為hbase的表名
hive_hbase_table_kv為hive表名

創建hive表並導入數據

CREATE TABLE kv (key STRING, value STRING);
LOAD DATA LOCAL INPATH '/home/spark/app/spark-1.0.0-bin-2.3.0-cdh5.0.0/examples/src/main/resources/kv1.txt' OVERWRITE INTO TABLE kv;
INSERT OVERWRITE TABLE hive_hbase_table_kv SELECT key, value FROM kv;

查看hive和hbase發現均創建了表,並且在兩邊均能查詢到數據。

 

案例二:操作簡單表多cf

CREATE TABLE hbase_table_2(key string, value1 string, value2 string, value3 string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" = ":key,a:b,a:c,d:e"
);

b/c字段屬於a列族,e屬於d列族。

默認不指定hbase的表名就和hive的表名相同

導入hive表數據:INSERT OVERWRITE TABLE hbase_table_2 SELECT empno, ename, job, deptno  FROM emp;

 

案例三:操作分區表

CREATE TABLE hbase_table_3(key string, ename string, job string, sal double) partitioned by(pt string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,a:b,a:c,d:e")
TBLPROPERTIES ("hbase.table.name" = "hbase_table_3");

導入hive數據:

INSERT OVERWRITE TABLE hbase_table_3 PARTITION(pt='2013-08-01') SELECT empno, ename, job, sal FROM emp;

 

注意事項:

與hbase整合的有分區的表在使用hive查詢時存在問題: select * from table查詢不顯示數據,select column from table可以查到數據

為什么select * from xxx 不顯示數據?

select * from xxx在普通表中是直接讀取HDFS文件,而使用hive-hbase-handler的方式來導入數據的時候,數據是存放在hbase的hdfs上;

在這里是直接從HBase進行查詢。查詢是成功了,但是hive並不會展示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM