版本如下:
hadoop-2.7.2
zookeeper-3.4.6
hive1.2.1
hbase-1.2.11
Hive整合Hbase,其实原理非常简单,因为hive实际存储也是存储在HDFS上,HBase的存储也是依赖于HDFS的,所以实际上还是做了表的维护,也就是元数据的构建,数据本身一直是在HDFS的。
1、修改hive-site.xml文件,是在hive的conf目录下
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
##这里将你hbase锁依赖的zookeeper配置一下,注意,是在hive的配置文件中配置,本身hive的配置文件是没有这个选项的
2、修改 hive-env .sh,这个文件是在hive的conf目录下
可能没有hive-env .sh,我们需要对hive-env.sh.template改名,
mv hive-env.sh.template hive-env.sh
然后修改配置文件:
export HADOOP_HOME=/opt/hadoop-2.7.2
export HIVE_CLASSPATH=$HIVE_CLASSPATH:/opt/hbase-1.2.11/lib
##注:这里的文件目录根据自己的路径配置
3、然后就是验证了,我找了一个例子:
##1.首先在hbase中创建一张表
hbase(main):001:0> create 'hbase_test',{NAME => 'f1',VERSION => 1},{NAME => 'f2',VERSION => 1},{NAME => 'f3',VERSION => 1}
##2.然后插入数据并查看数据:
hbase(main):002:0> put 'hbase_test','001','f1:name','liubei'
0 row(s) in 0.1690 seconds
hbase(main):003:0> put 'hbase_test','001','f2:age','30'
0 row(s) in 0.0150 seconds
hbase(main):004:0> put 'hbase_test','001','f3:sex','male'
0 row(s) in 0.0150 seconds
hbase(main):005:0> scan 'hbase_test'
ROW COLUMN+CELL
001 column=f1:name, timestamp=1551420266121, value=liubei
001 column=f2:age, timestamp=1551420277930, value=30
001 column=f3:sex, timestamp=1551420283640, value=male
##3.在hive中创建表,并查看数据,只要创建了表,数据已经被hive所管理了
##建表语句
hive> CREATE EXTERNAL TABLE hiveFromHbase(
> rowkey string,
> f1 map<STRING,STRING>,
> f2 map<STRING,STRING>,
> f3 map<STRING,STRING>
> ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
> WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:,f2:,f3:")
> TBLPROPERTIES ("hbase.table.name" = "hbase_test");
##查看数据
hive> select * from hiveFromHbase;
OK
001 {"name":"liubei"} {"age":"30"} {"sex":"male"}
##4.再次向hbase中插入数据,完成后从hive中查询
##向hbase中插入数据,并在hbase中查看插入的数据
hbase(main):006:0> put 'hbase_test','002','f1:name','guanyu'
0 row(s) in 0.0580 seconds
hbase(main):007:0> put 'hbase_test','002','f2:age','28'
0 row(s) in 0.0150 seconds
hbase(main):008:0> put 'hbase_test','002','f3:sex','female'
0 row(s) in 0.0250 seconds
hbase(main):009:0> scan 'hbase_test'
ROW COLUMN+CELL
001 column=f1:name, timestamp=1551420266121, value=liubei
001 column=f2:age, timestamp=1551420277930, value=30
001 column=f3:sex, timestamp=1551420283640, value=male
002 column=f1:name, timestamp=1551420485877, value=guanyu
002 column=f2:age, timestamp=1551420490547, value=28
002 column=f3:sex, timestamp=1551420494665, value=female
##在hive中直接查询数据
hive> select * from hiveFromHbase;
OK
001 {"name":"liubei"} {"age":"30"} {"sex":"male"}
002 {"name":"guanyu"} {"age":"28"} {"sex":"female"}
哦了@