1. 启动hive,并连接到hbase
./hive --auxpath /opt/apache/hive-0.12.0-bin/lib/hive_hbase-handler-0.12.0.jar,/opt/apache/hive-0.12.0-bin/lib/hbase-0.94.8.jar -hiveconf hbase.master=master1:60000
注意,hive_hbase-handler-0.12.0.jar这个jar包要根据连接hbase的版本进行重新编译,具体方法请参考相关文章
2. 创建内表
CREATE TABLE hive_123(word string, count bigint)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "hive_123");
执行这条命令后,hive将会在hbase上创建表"hive_123",hive列与hbase列的映射关系为:
word字段为hbase表的rowkey,count字段则为cf1:val即column family为cf1,qualifier为val
3. 创建外表
CREATE EXTERNAL TABLE hive_vv(key string, sip string, count int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf0:sip,cf1:count")
TBLPROPERTIES ("hbase.table.name" = "hive_vv");
创建一个hive外表,将名为hive_w的hbase表识别到hive中。
4. 使用二进制存储数据
默认情况下,hbase都是以字符串存储数据,hive也支持使用二进制方式在hbase中保存数据
CREATE EXTERNAL TABLE hive_filter(key string, sport int, cout int, ctx string )
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf2:sport#b,cf3:count#b, cf4:ctx")
TBLPROPERTIES ("hbase.table.name" = "hive_filter");
其中cf2:sport#b,cf3:count#b表示sport、count两个字段以二进制的方式保存在hbase表中
5. 将hive表中的内容导入hbase表
INSERT OVERWRITE TABLE hive_vv SELECT key,sip,count FROM hive_textfile;
6. 将hbase表中的内容导入hive表
INSERT OVERWRITE TABLE hive_textfile SELECT * FROM hive_vv;
7. scan优化
在hive的命令行中,设置set hbase.scan.cache=10000;set hbase.scan.cacheblock=false;