Hive 与Hbase 整合
原理:
Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类, 大致意思如图所示:
附件:
编译好的hive-hbase-handler-1.2.1.jar,可以直接使用
环境 —— jdk:1.8.0_65;hadoop:2.6.0 单节点;hbase:1.2.1;hive:1.2.1;hbase使用自带内嵌的zookeeper
步骤
1、 重新编译apache-hive-1.2.1-src\hbase-handler\src 生成hive-hbase-handler-1.2.1.jar替换掉$HIVE_HOME/lib下的hive-hbase-handler-1.2.1.jar
2、 启动hadoop单节点sbin/start-all.sh
3、 启动hbase :bin/start-hbase.sh
如果没有JobHistoryServer进程,单独启动一下——$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh stop historyserver
4、 Hive启动:bin/hive -hiveconf hbase.master=single:60000
Single:为本机的ip地址
5、 执行:创建一张与hbase相互关联的表
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");
6、 创建一张hive表CREATE TABLE pokes (foo INT, bar STRING);
7、 数据导入
LOAD DATA LOCAL INPATH '/home/hadoop/poke.txt' OVERWRITE INTO TABLE pokes;
8、 在关联表中插入数据
INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=98;
9、 hive查看数据
select * from hbase_table_1;
10、 在hbase查看数据
scan 'xyz'
插入数据put 'xyz','100','cf1:val','www.360buy.com'
Hive中查看hbase插入的数据hive> select * from hbase_table_1
最终的效果:
以上整合过程和操作步骤已经执行完毕,现在Hive中添加记录HBase中有记录添加,同样你在HBase中添加记录Hive中也会添加, 表示Hive与HBase整合成功,现在可以在HBase写入,在Hive中查询?因为HBase 不支持复杂的查询,但是HBase可以作为基于 key 获取一行或多行数据,或者扫描数据区间,以及过滤操作。而复杂的查询可以让Hive来完成,一个作为存储的入口(HBase),一个作为查询的入口(Hive)。