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");
創建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列族。
導入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並不會展示。