Hbase整合Hive案例

一、原理:

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

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

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

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

二、创建表

   创建 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'

三、Hive端操作:

1)指定 hbase 所使用的 zookeeper 集群的地址:默认端口是 2181,可以不写

    set hbase.zookeeper.quorum=centos01:2181,centos02:2181centos03:2181;

2)指定 hbase 在 zookeeper 中使用的根目录

    set zookeeper.znode.parent=/hbase;

hbase的相关数据(-root的寻址路径等)在zookeeper上的存储的znode路径

    <property>

    <name>zookeeper.znode.parent</name>

    <value>/hbase</value>

    <description>Root ZNode for HBase in ZooKeeper. All of HBase's ZooKeeper files that are configured with a relative path will  go under this node.By default, all of HBase's ZooKeeper file path are configured with a relative path, so they will all go under this directory unless changed.

   </description>

    </property>

3)加入指定的处理 jar

     add jar /home/wqing/apps/apache-hive-2.3.2-bin/lib/hive-hbase-handler-2.3.2.jar;

     hive只能加载自己的classpath下的

四、创建基于 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","hbase.mapred.output.outputtable"="mingxing");

解释文字:

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

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

    hbase.table.name:hbase 表名

    tblproperties:指定关联表名

    with serdeproperties:指定行键,列族的关联信息

    建表的过程中自动进行关联

    ":key  代表取行键的值,

    base_info:  取得base_info所有列信息,

    extra_info: 取的是extra_info所有的列信息"

五、验证:

select * from mingxing;

select count(*) 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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值