Hbase之整合Hive

一、HBase 整合 Hive 


3.1、原理 
Hive 与 HBase 利用两者本身对外的 API 来实现整合,主要是靠 HBaseStorageHandler 进 行通信,利用 HBaseStorageHandler,Hive 可以获取到 Hive 表对应的 HBase 表名,列簇以及 列,InputFormat 和 OutputFormat 类,创建和删除 HBase 表等。  
Hive 访问 HBase 中表数据,实质上是通过 MapReduce 读取 HBase 表数据,其实现是在 MR 中,使用 HiveHBaseTableInputFormat 完成对 HBase 表的切分,获取 RecordReader 对象来读 取数据。  
对 HBase 表的切分原则是一个 Region 切分成一个 Split,即表中有多少个 Regions,MR 中就 有多少个 Map。  
读取 HBase 表数据都是通过构建 Scanner,对表进行全表扫描,如果有过滤条件,则转化为 Filter。当过滤条件为 rowkey 时,则转化为对 rowkey 的过滤,Scanner 通过 RPC 调用 RegionServer 的 next()来获取数据  


3.2、准备 HBase 表和数据 
创建 HBase 表: create 'mingxing',{NAME => 'base_info',VERSIONS => 1},{NAME => 'extra_info',VERSIONS => 1}  
插入准备数据: 

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.3、Hive 端操作 
进入 Hive 客户端,需要进行一下参数设置: 指定 hbase 所使用的 zookeeper 集群的地址:默认端口是 2181,可以不写 set hbase.zookeeper.quorum=hadoop01:2181,hadoop02:2181,hadoop03:2181;

指定 hbase 在 zookeeper 中使用的根目录 set zookeeper.znode.parent=/hbase;

加入指定的处理 add jar /home/hadoop/apps/apache-hive-2.3.2-bin/lib/hive-hbase-handler-2.3.2.jar;  


创建基于 HBase 表的 hive 表:

所有列簇:

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");  


部分列簇部分列:

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");  


org.apache.hadoop.hive.hbase.HBaseStorageHandler:处理 hive 到 hbase 转换关系的处理器

hbase.columns.mapping:定义 hbase 的列簇和列到 hive 的映射关系

hbase.table.name:hbase 表名 


3.4、验证 
查询语句: select * 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值