Hive on HBase部署使用(1.00) 2015-05-12 21:00

说明

通过Hive的Hive QL查询HBase的表。

安装

将HBase的相关jar包和HBase的Zookeeper包拷贝到Hive目录中。
注意:如果有多台HiveServer2,各个节点都需要这样操作。

1
2
3
4
5
6
7
cd /opt/hbase/lib
cp hbase*.jar /opt/hive/lib/
cp htr*.jar /opt/hive/lib/
# 需要删除Hive的Zookeeper包,并使用HBase的Zookeeper包。
rm /opt/hive/lib/zookeeper*.jar
# hive使用hbase的Zookeeper jar包
cp zookeeper-3.4.6.jar /opt/hive/lib/

配置

在HiveServer2节点(Metastore节点不需要)的hive-site.xml中增加如下配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<property>
    <name>hive.aux.jars.path</name>
    <value>/opt/hive/lib/hive-hbase-handler-1.0.0.jar,/opt/hive/lib/hbase-server-0.98.11- 
hadoop2.jar,/opt/hive/lib/zookeeper-3.4.6.jar,/opt/hive/lib/guava-11.0.2.jar</value>
    <description>The location of the plugin jars that contain implementations of user 
defined functions and serdes.</description>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>data01,data02,data03</value>
    <description>for Hive on Hbase</description>
  </property>

注意:hive.aux.jars.path这个配置项已存在于hive-site.xml中,只是没有值,添加值即可。

启动HiveServer2的方式与Hive on HDFS时相同:

hive --service hiveserver2 &
hive --service hiveserver2 &
hive --service metastore &
hive --service metastore &

使用

  • 在Hive上关联已有的HBase表

假设HBase上的表如下:

hbase(main):009:0> scan 'house'
ROW                   COLUMN+CELL
 abc123               column=info:name, timestamp=1430312623488, value=shuixie
 abc123               column=price:total, timestamp=1430312682199, value=1900000
 abc123               column=price:unit, timestamp=1430312672683, value=21000
 abc124               column=info:name, timestamp=1430312634052, value=zhonghang
 abc125               column=info:name, timestamp=1430312646389, value=1866
3 row(s) in 0.2810 seconds

hbase(main):010:0>

我们在Hive上创建相应的表,并将二者关联。然后就可以通过Hive查询HBase的表了。

1
2
3
4
5
6
CREATE EXTERNAL TABLE hive_house(hive_id STRING, hive_name STRING)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name")
TBLPROPERTIES ("hbase.table.name" = "house"); 

DESC hive_house;

将Hive中的表的hiveid字段映射到HBase表的row key,将hivename字段映射到HBase中的info:name。

在Hive中查询HBase的数据:

0: jdbc:hive2://ctrl:10000> select * from hive_house;
+---------------------+-----------------------+--+
| hive_house.hive_id  | hive_house.hive_name  |
+---------------------+-----------------------+--+
| abc123              | shuixie               |
| abc124              | zhonghang             |
| abc125              | 1866                  |
+---------------------+-----------------------+--+
3 rows selected (0.513 seconds)
0: jdbc:hive2://ctrl:10000>
  • 在Hive上创建新表
1
2
3
CREATE TABLE hive_student(id STRING, name STRING)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name");

备注:此操作将同步在HBase上创建同名的表格。如果需要指定HBase使用不同的表名,通过TBLPROPERTIES (“hbase.table.name” = “house”)指定。

参考文档

  1. Hive HBase Integration
  2. Hive 0.13.1 和HBase 0.98.6.1整合
Tags: #Hive #HBase    Post on Hadoop