1. 首页
  2. 大数据
  3. Hive教程

【HIVE教程】(十七)HIVE与HBASE的整合

HIVE与HBASE的整合实际生产中用的还是比较广泛,比如原始数据集–>Mapreduce清洗–>HBASE–>HIVE,再比如Flume–>HBASE–>HIVE。本文讲解它俩是如何整合的。

准备工作

涉及到集成,都要有包的依赖。但如果是CDH同版本的,CDH已经做了集成,就不需要拷贝包了。建议都使用CDH版本的,本站所有教程都是基于CDH。【资源下载】页面有相关软件包可供下载。
非CDH版本需要如下包:

hbase-protocol.jar
hbase-server.jar
hbase-client.jar
hbase-common.jar
htrace-core.jar

还需要配置hive-site.xml文件,hive通过zk去连接hbase

<property>
  <name>hbase.zookeeper.quorum</name>
  <value>master,slave1,slave2</value>
</property>

HBASE表数据同步到HIVE中

此种情况发生在,HBASE中已经存在数据,要同步到HIVE中,只要HBASE新增数据,那么HIVE就会同时新增数据。方法是外部表!比较重要的是在hbase.columns.mapping属性中定义好HBASE和HIVE的映射关系。

hbase(main):011:0> scan 'hive_table_2'
ROW                                                   COLUMN+CELL                             
 10001                                                column=info:age, timestamp=1526367631749, value=12                                                             
 10001                                                column=info:name, timestamp=1526367623993, value=lyl                                                             
 10002                                                column=info:age, timestamp=1526367660383, value=33                                                             
 10002                                                column=info:name, timestamp=1526367651131, value=wee                                                                                                       
2 row(s) in 0.0130 seconds

创建HIVE外部表,指向HBASE中的hive_table_2表。

hive (default)> CREATE EXTERNAL TABLE hbase_table_2(id int, name string,age int) 
              > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
              > WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age")
              > TBLPROPERTIES ("hbase.table.name" = "hive_table_2");
OK
Time taken: 0.426 seconds
hive (default)> select * from hbase_table_2;
OK
hbase_table_2.id    hbase_table_2.name  hbase_table_2.age
10001   lyl 12
10002   wee 33
Time taken: 0.239 seconds, Fetched: 2 row(s)

可以看到,刚创建好就可以查出数据,因为它是指向HBASE已经存在的数据。
HBASE中新增数据,HIVE中会同步数据。
删除HIVE表,HBASE表不受影响

HIVE中的表数据同步到HBASE中

此种情况发生在,HIVE中的表,同步给HBASE,HIVE中新增数据,HBASE中就同时新增数据。
方法是通过内部表!创建HIVE表的时候,指定数据存储在HBASE中。这样,只要HIVE中有了数据,HBASE中就会有数据。

hive (default)> CREATE TABLE hbase_table_1(id int, name string,age int) 
              > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
              > WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age")
              > TBLPROPERTIES ("hbase.table.name" = "hive_table_1");

[注意,HBASE中不能已经存在hive_table_1这个表。]
往HIVE中插入数据,查看HBASE中是否同步这个表:

hive (default)> insert into hbase_table_1 select id,name,age from origin;
hbase(main):004:0> scan 'hive_table_1'
ROW                                                   COLUMN+CELL                             
 1                                                    column=info:age, timestamp=1526367363930, value=12                                                             
 1                                                    column=info:name, timestamp=1526367363930, value=qqqqq       

删除HIVE中的表,HBASE的表也会被删除

hive (default)> drop table hbase_table_1;
hbase(main):005:0> scan 'hive_table_1'
ERROR: Unknown table hive_table_1!

BDStar原创文章。发布者:Liuyanling,转载请注明出处:http://bigdata-star.com/archives/1808

发表评论

登录后才能评论

联系我们

562373081

在线咨询:点击这里给我发消息

邮件:562373081@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code