Hive整合HBase原理
Hive与HBase整合的实现是利用两者本身对外的API接口互相通信来完成的,其具体工作交由Hive的lib目录中的hive-hbase-handler-*.jar工具类来实现,通信原理如下图所示。
Hive整合HBase后的使用场景:
(一)通过Hive把数据加载到HBase中,数据源可以是文件也可以是Hive中的表。
(二)通过整合,让HBase支持JOIN、GROUP等SQL查询语法。
(三)通过整合,不仅可完成HBase的数据实时查询,也可以使用Hive查询HBase中的数据完成复杂的数据分析。
Hive整合HBase配置
1 Hive映射HBase表
// 如果hbase是集群,需要修改hive-site.xml文件配置
$ vim hive-site.xml
- <property>
- <name>hbase.zookeeper.quorum</name>
- <value>node1,node2,node3</value>
- </property>
// 将hbase lib目录下的所有文件复制到hive lib目录中
$ cd app/hive-1.1.0-cdh5.7.1/
$ cp ~/app/hbase-1.2.0-cdh5.7.1/lib/* lib/
// 在hive中创建映射表
$ hive shell
> create table hive_hbase_test(key int,value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,cf1:val") tblproperties("hbase.table.name"="hive_hbase_test");
备注:在hive中创建表hive_hbase_test,这个表包括两个字段(int型的key和string型的value),映射为hbase中的表hive_hbase_test,key对应hbase的rowkey,value对应hbase的cf1:val列。
// 在hbase中查看是否存在映射表
$ hbase shell
> list
2 整合后功能测试
// 创建测试数据
$ vim poke.txt
1 zhangsan
2 lisi
3 wangwu
// 在hive中创建一个poke表并加载测试数据
> create table poke(key int,valuestring) row format delimited fields terminated by '\t';
> load data local inpath '/home/developer/poke.txt' overwrite into table poke;
> select * from poke;
// 将hive的poke表中的数据加载到hive_hbase_test表
> insert overwrite table hive_hbase_test select * from poke;
> select * from hive_hbase_test;
// 查看hbase的hive_hbase_test表中是否有同样的数据
> scan 'hive_hbase_test'
需要说明以下几点:
(一)Hive映射表的字段是HBase表字段的子集。整合之后的Hive表不能被修改。
(二)Hive中的映射表不能直接插入数据,所以需要通过将数据加载到另一张poke表,然后通过查询poke表将数据加载到映射表。
(三)上述示例是通过创建内部表的方式将Hive表映射到HBase表,HBase表会自动创建,而且Hive表被删除后HBase表也会自动删除。
(四)如果HBase表已有数据,可以通过创建Hive外部表的方式将Hive表映射到HBase表,通过HQLHive表实现对HBase表的数据分析。Hive表删除将不会对HBase表造成影响。创建外部表的方法如下:
> create external table hive_hbase_test(key int,value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,cf1:val") tblproperties("hbase.table.name"="hive_hbase_test");