5 Hive整合HBase原理
Hive与HBase整合的实现是利用两者本身对外的API接口互相通信来完成的,其具体工作交由Hive的lib目录中的hive-hbase-handler-*.jar工具类来实现,通信原理如下图所示。
Hive安装及与HBase的整合" src="/uploads/allimg/200603/1SP2N13_0.png" />
Hive整合HBase后的使用场景:
(一)通过Hive把数据加载到HBase中,数据源可以是文件也可以是Hive中的表。
(二)通过整合,让HBase支持JOIN、GROUP等SQL查询语法。
(三)通过整合,不仅可完成HBase的数据实时查询,也可以使用Hive查询HBase中的数据完成复杂的数据分析。
6 Hive整合HBase配置 6.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
6.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");
Ubuntu Server 14.04 下 Hbase数据库安装
HBase 结点之间时间不一致造成regionserver启动失败
CentOS 6.3下HBase伪分布式平台搭建