Hive HBase 整合

运行环境 | centos 7.0 | hbase 1.2.10 | hive 1.2.2

Hive只支持insert和delete操作,并不支持update操作,所以无法实施更新hive里的数据,而HBase正好弥补了这一点,所以在某些场景下需要将Hive和HBase整合起来一起使用。
Hive与HBase整合的实现是利用两者本身对外的API接口互相通信来完成的,其具体工作交由Hive的lib目录中的hive-hbase-handler-*.jar工具类来实现,通信原理如下图所示

Hive整合HBase后的使用场景:

  • 通过Hive把数据加载到HBase中,数据源可以是文件也可以是Hive中的表。
  • 通过整合,让HBase支持JOIN、GROUP等SQL查询语法。
  • 通过整合,不仅可完成HBase的数据实时查询,也可以使用Hive查询HBase中的数据完成复杂的数据分析。

HBASE_HOME/lib下所有的jar 复制到HIVE_HOME/lib/

cp -n $HBASE_HOME/lib/* $HIVE_HOME/lib/ -n 表示对于目标路径下已经存在的文件,则不复制过去

修改hive-site.xml文件,增加HBase的ZooKeeper集群信息

1
2
3
4
<property>
<name>hbase.zookeeper.quorum</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>

指定 hbase 所使用的 zookeeper 集群的地址:默认端口是 2181,可以不写

set hbase.zookeeper.quorum=node01:2181,node02:2181,node03:2181;
set zookeeper.znode.parent=/var/zookeeper/local;

指定 hbase 在 zookeeper 中使用的根目录

该路径在hbase-site.xml可以查询,你在搭建hbase集群的时候,这个参数是必须设置的

1
2
3
4
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/var/zookeeper/local</value>
</property>

HIVE_HOME/lib/hive-hbase-handler-1.2.1.jar 复制到HBASE_HOME/lib/

cp */hive-1.2.1/lib/hive-hbase-handler-1.2.1.jar */hbase/lib/

启动HBase,创建HBase表”student”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
create 'student','info'

put 'student','0001','info:name','Tom'
put 'student','0001','info:age','18'

put 'student','0002','info:name','Madeline'
put 'student','0002','info:age','15'

put 'student','0003','info:name','jed'
put 'student','0003','info:age','16'

put 'student','0004','info:name','olivia'
put 'student','0004','info:age','18'

put 'student','0005','info:name','sarah'
put 'student','0005','info:age','19'

put 'student','0006','info:name','xiaohong'
put 'student','0006','info:age','19'

put 'student','0007','info:name','zhangsan'
put 'student','0007','info:age','20'

put 'student','0008','info:name','wangwu'
put 'student','0008','info:age','22'

Hive中创建表结构

1
2
3
CREATE EXTERNAL TABLE hive_student_name (key string,name string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name") TBLPROPERTIES ("hbase.table.name" = "student");

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

通过Hive客户端可以查询该表的数据

本文结束感谢您的阅读,本文原创–支持原创
顺便打点赏吧~ 有问题请联系我--strivedeer@163.com