hbase和hive整合实战

11 篇文章 0 订阅

hbase表映射到hive表中

1 在hbase中创建表:

表名hbase_test, 有三个列族 f1、f2、f3

create 'hbase_test',{NAME => 'f1',VERSIONS => 1},{NAME => 'f2',VERSIONS => 1},{NAME => 'f3',VERSIONS => 1}
2 插入数据
put 'hbase_test','r1','f1:name','zhangsan'
put 'hbase_test','r1','f2:age','20'
put 'hbase_test','r1','f3:sex','male'
put 'hbase_test','r2','f1:name','lisi'
put 'hbase_test','r2','f2:age','30'
put 'hbase_test','r2','f3:sex','female'
put 'hbase_test','r3','f1:name','wangwu'
put 'hbase_test','r3','f2:age','40'
put 'hbase_test','r3','f3:sex','male'
3 查询数据

可正常查询。

4 创建基于hbase的hive表
CREATE EXTERNAL TABLE hiveFromHbase(
rowkey1 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");

这里使用外部表EXTERNAL TABLE映射到HBase中的表,这样,在Hive中删除表,并不会删除HBase中的表,否则,就会删除。另外,除了rowkey,其他三个字段使用Map结构来保存HBase中的每一个列族。

  • hbase.columns.mapping
    Hive表和HBase表的字段映射关系,分别为:Hive表中第一个字段映射:key(rowkey),第二个字段映射列族f1,第三个字段映射列族f2,第四个字段映射列族f3
  • hbase.table.name
    HBase中表的名字
5 hive中查询hbase表

可以看到,Hive中有3行数据,因为有3个rowkey,每一个列族的列和值,分别被存储到Map结构中

6 Hive中插入数据到HBase表
insert into table hiveFromHbase
SELECT 'r4' AS rowkey,
map('name','zhaoliu') AS f1,
map('age','50') AS f2,
map('sex','male') AS f3
from person limit 1;

插入成功后查看2张表的数据
数据均有插入。

Hive中的外部表hiveFromHbase,就和其他外部表一样,只有一份元数据,真正的数据是在HBase表中,Hive通过hive-hbase-handler来操作HBase中的表。

hive表映射到hbase表中

1 创建映射hbase的表
create   table hive_test(
id string,
name string,
age int,
address string
)STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:name,f2:age,f3:address")
TBLPROPERTIES ("hbase.table.name" = "hbaseFromhive");

在hive1.2.1 跟hbase 0.98整合时,需要添加:
“hbase.mapred.output.outputtable” = “hbaseFromhive” 表属性
TBLPROPERTIES (“hbase.table.name” = “hbaseFromhive”,“hbase.mapred.output.outputtable”=“hbaseFromhive”);
如果不添加会报错:Must specify table name

2 查看hbase映射表是否产生

list

3 查看hbase映射表的表结构和数据

由于hive表中没有加载数据,此时hbase中映射的表也无数据
desc “hbaseFromhive”

4 Hive表加载数据

数据来源于另一张表hive_source;
加载数据:
insert overwrite table hive_test select * from hive_source;

5 查看hive和hbase中表的数据

映射表可以查看到hive表中的数据。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值