一、 前提
1、 zookeeper、hadoop、hive、hbase已经安装完成
2、 其中hive和hbase没有关系
二、 整合
1、 分析
hive要和hbase通讯,重要的一点就是hive能够加载到连接hbase的jar包;然后通过hive和hbase的api进行通讯
2、 如何能让hive加载到hbase的jar包?
方案一、 将hbase的软件包下面的lib里面的jar包复制到hive目录下的lib中(个人不推荐),因为总感觉复制来复制去的东东不靠谱
方案二、 通过修改配置文件的方式(推荐),个人感觉比较规范,靠谱
修改hive软件包目录下的conf/hive-env.sh文件,添加如下两行
export HADOOP_HOME=/usr/local/software/hadoop-3.1.2
export HBASE_HOME=/usr/local/software/hbase-2.1.3
分别是Hadoop和Hbase安装目录
修改hive-site.xml文件,添加zookeeper配置
<property>
<name>hbase.zookeeper.quorum</name>
<value>h1,h2,h3</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
配置完毕
三、使用hive操作hbase表
1、 打开hbase shell
# hbase shell
...........................
hbase(main):001:0>
2、 创建数据表(test为表名,user为列簇)
hbase(main):001:0> create table 'test','user'
3、 向表中插入数据
hbase(main):001:0> put 'test','rowkey-1','user:id','1'
hbase(main):001:0> put 'test','rowkey-1','user:name','admin'
hbase(main):001:0> put 'test','rowkey-2','user:id','1'
hbase(main):001:0> put 'test','rowkey-2','user:name','user'
hbase数据表创建完毕
使用hive连接hbase中的test表
1、 使用hive创建外部表(位置在hbase上)
CREATE EXTERNAL TABLE test(key string,id int,name string) STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES
("hbase.columns.mapping" = ":key,user:id,user:name")
TBLPROPERTIES("hbase.table.name" = "test");
解释一下:创建一个外部表,表名为test,有3列(key,id,name)其中key为虚拟列。外部表位置为hbase,处理类org.apache.hadoop.hive.hbase.HBaseStorageHandler,映射关系为,列簇:列名 映射表为test;
至此,使用hive关联hbase表完毕
然后就可以使用hive操作hbase中的test表了
hive> select * from test;
1 1 wx
2 2 user
Time taken: 0.763 seconds, Fetched: 2 row(s)
hive>