Hase整合hive

HBase整合hive

  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()来获取数据。

  2. Hive端操作
    进入 Hive 客户端,需要进行一下参数设置:
    1.指定 hbase 所使用的 zookeeper 集群的地址:默认端口是 2181,可以不写。set base.zookeeper.quorum=hadoop03:2181,hadoop04:2181,hadoop05:2181;
    2.指定 hbase 在 zookeeper 中使用的根目录。set zookeeper.znode.parent=/hbase;
    3.加入指定的处理 jar。add jar /home/hadoop/apps/apache-hive-1.2.1-bin/lib/hive-hbase-handler-1.2.1.jar;

  3. 创建基于 HBase 表的 hive 表:

    所有列簇:
    例:create external table mingxing(rowkey string, base_info map, extra_info map) row format elimited 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的表名

你可能感兴趣的:(Hive)