Hive整合HBase—通过Hive读/写 HBase中的表

将Hive与HBase整合在一起,使Hive可以读取HBase中的数据,让Hadoop生态系统中最为常用的两大框架互相结合,相得益彰。

在Hive中创建HBase识别的表

CREATE TABLE hbase_hive_1(key int, value string)   
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'   
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")   
TBLPROPERTIES ("hbase.table.name" = "xyz"); 

hbase.table.name 定义在hbase中的table名称

多列时,data:1,data:2
多列族时,data1:1,data2:1


hbase.columns.mapping 定义在hbase的列族,里面的:key 是固定值而且要保证在表pokes中的foo字段是唯一值

创建有分区的表

CREATE TABLE hbase_hive_2(key int, value string)    
partitioned by (day string)   
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'   
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")   
TBLPROPERTIES ("hbase.table.name" = "xyz2");

分别查看Hive、HBase中建立的表

导入数据

新建hive的数据表

create table pokes(foo int,bar string)
row format delimited fields terminated by ',';

load data local inpath '/home/yujianxin/temp/data1.txt' overwrite into table pokes; --导入数据
SET hive.hbase.bulk=true;
insert overwrite table hbase_hive_1 select * from pokes;--使用sql导入hbase_table_1
insert overwrite table hbase_hive_2  partition (day='2012-01-01') select * from pokes;--导入有分区的表

往Hive中插入数据同时会插入到HBase中

分别查看Hive、HBase中的数据

到此Hive、HBase整合成功

下面再给出较复杂的测试例子

情况一、对于在hbase已经存在的表,在hive中使用CREATE EXTERNAL TABLE来建立联系

create external table hive_test (key int,gid map<string,string>,sid map<string,string>,uid map<string,string>)   
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'   
WITH SERDEPROPERTIES ("hbase.columns.mapping" ="a:,b:,c:")    
TBLPROPERTIES  ("hbase.table.name" = "test1"); 

查询gid字段中value值:

Hive成功读取到HBase中的数据

情况二、如果hbase表test2中的字段为user:gid,user:sid,info:uid,info:level

在hive中建表语句为:

CREATE EXTERNAL TABLE hive_test_2(key int,user map<string,string>,info map<string,string>)   
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'   
WITH SERDEPROPERTIES ("hbase.columns.mapping" ="user:,info:")    
TBLPROPERTIES  ("hbase.table.name" = "test2"); 

Hive成功读取到HBase中的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值