HBase+Hive学习笔记:HBase与Hive协同工作

HBase与Hive协同工作

因为这一部分的内容是HBase与Hive协同工作,所以归在了HBase+Hive这个分类XD,协同的实现是利用两者本身对外的API接口互相进行通信,依靠hive-hbase-handler.jar工具类

测试环境

hive-1.1.0-cdh5.14.0
hbase-1.2.0-cdh5.14.0
hadoop-2.6.0-cdh5.14.0
zookeeper-3.4.5-cdh5.14.0
jdk1.8.0_171

前期准备

1.将$HIVE_HOME/lib下的hive-hbase-handler-1.1.0-cdh5.14.0.jar复制到$HBASE_HOME/lib中
2.将$HBASE_HOME/lib下的所有jar包复制到$HIVE_HOME/lib,这里可以使用yes|cp -r $HBASE_HOME/lib/*.jar $HIVE_HOME/lib以避免输入一大堆的yes
3.将MySQL驱动mysql-connector-java-5.1.40-bin.jar复制到$HIVE_HOME/lib中
4.启动Hadoop、Hive(MetaStore、HiveServer2)、Zookeeper、HBase

测试过程

情景1:HBase中有表,然后要整合到Hive中

先在HBase中创建表worker

create 'worker','info'
put 'worker','test','info:name','tom'
put 'worker','test','info:age','12'

HBase+Hive学习笔记:HBase与Hive协同工作_第1张图片

然后在Hive中创建表hive_worker
hbase.table.name是定义在HBase的表名,hbase.columns.mapping是定义HBase表中的列族和字段

create external table hive_worker(key string,name string,age string)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,info:name,info:age")
tblproperties("hbase.table.name"="worker");

注意,这里使用了外部表,如果使用内部表,会报错
HBase+Hive学习笔记:HBase与Hive协同工作_第2张图片
查询该表

在hive中往表hive_worker添加数据
HBase+Hive学习笔记:HBase与Hive协同工作_第3张图片
HBase中也会同步数据过来

情景2:Hive中有表,要整合到HBase中

在Hive中创建测试表test_table

CREATE TABLE test_table(key int, name string,age string)   
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age")  
TBLPROPERTIES ("hbase.table.name" = "table_test");  

HBase中就会生成一张空表table_test

往Hive表test_table中添加数据
HBase+Hive学习笔记:HBase与Hive协同工作_第4张图片
在HBase中scan table_test

数据已经同步过来了,接着在HBase端put数据,发现Hive中的表也会同步数据
HBase+Hive学习笔记:HBase与Hive协同工作_第5张图片

你可能感兴趣的:(Hive,Hbase)