HBase 整合 Hive

1、原理

(1)Hive 与 HBase 利用两者本身对外的 API 来实现整合,主要是靠 HBaseStorageHandler 进行通信,利用 HBaseStorageHandler,Hive 可以获取到 Hive 表对应的 HBase 表名,列簇以及列,InputFormat 和 OutputFormat 类,创建和删除 HBase 表等。

(2)Hive 访问 HBase 中表数据,实质上是通过 MapReduce 读取 HBase 表数据,其实现是在 MR 中使用 HiveHBaseTableInputFormat 完成对 HBase 表的切分,获取 RecordReader 对象来读取数据。

(3)对 HBase 表的切分原则是一个 Region 切分成一个 Split,即表中有多少个 Regions,MapReduce 中就有多少个 Map。

(4)读取 HBase 表数据都是通过构建 Scanner,对表进行全表扫描,如果有过滤条件,则转化为 Filter。当过滤条件为 RowKey 时,则转化为对 RowKey 的过滤,Scanner 通过 RPC 调用 RegionServer 的 next() 来获取数据。

2、准备 HBase 表和数据

(1)创建 HBase 表:

create 'mingxing',{NAME => 'base_info',VERSIONS => 3},{NAME => 'extra_info',VERSIONS => 3}

(2)插入测试数据:

put 'mingxing','rk001','base_info:name','huangbo'
put 'mingxing','rk001','base_info:age','33'
put 'mingxing','rk001','extra_info:math','44'
put 'mingxing','rk001','extra_info:province','beijing'
put 'mingxing','rk002','base_info:name','xuzheng'
put 'mingxing','rk002','base_info:age','44'
put 'mingxing','rk003','base_info:name','wangbaoqiang'
put 'mingxing','rk003','base_info:age','55'
put 'mingxing','rk003','base_info:gender','male'
put 'mingxing','rk004','extra_info:math','33'
put 'mingxing','rk004','extra_info:province','tianjin'
put 'mingxing','rk004','extra_info:children','3'
put 'mingxing','rk005','base_info:name','liutao'
put 'mingxing','rk006','extra_info:name','liujialing'

3、Hive 端操作

进入 Hive 客户端默认数据库下 beeline -u jdbc:hive2://hadoop01:10000/default -n hadoop,需要进行一下参数设置:
(1)指定 hbase 所使用的 zookeeper 集群的地址,默认端口是 2181(可以不写):

set hbase.zookeeper.quorum=hadoop01:2181,hadoop02:2181,hadoop03:2181,hadoop04:2181,hadoop05:2181;

(2)指定 hbase 在 zookeeper 中使用的根目录(可以不用):

set zookeeper.znode.parent=/hbase;

(3)加入指定的处理 jar(看你的hive 版本,可以不用):

add jar /home/hadoop/apps/hive-2.3.3/lib/hive-hbase-handler-2.3.3.jar;

(4)创建基于 HBase 表的 hive 表:
A、所有列簇:

create external table mingxing(rowkey string, base_info map<string, string>, extra_info map<string, string>) 
row format delimited fields terminated by '\t' 
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
with serdeproperties ("hbase.columns.mapping" = ":key,base_info:,extra_info:") 
tblproperties("hbase.table.name"="mingxing","hbase.mapred.output.outputtable"="mingxing");

B、部分列簇部分列:

create external table mingxing1(rowkey string, name string, province string)
row format delimited fields terminated by '\t'
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties ("hbase.columns.mapping" = ":key,base_info:name,extra_info:province")
tblproperties("hbase.table.name"="mingxing","hbase.mapred.output.outputtable"="mingxing");

C、org.apache.hadoop.hive.hbase.HBaseStorageHandler:处理 hive 到 hbase 转换关系的处理器。
D、hbase.columns.mapping:定义 hbase 的列簇和列到 hive 的映射关系。
E、hbase.table.name:hbase 表名。

4、验证

查询语句:

select * from mingxing;
select count(*) from mingxing;
select count(rowkey) from mingxing;
select count(distinct rowkey) from mingxing;
select rowkey,base_info['name'] from mingxing;
select rowkey,extra_info['province'] from mingxing;
select rowkey,base_info['name'], extra_info['province'] from mingxing;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值