1.1原理
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
1.2hive端操作
指定 hbase 所使用的 zookeeper 集群的地址:默认端口是 2181 ,可以不写
set hbase.zookeeper .quorum =hadoop03:2181 ,hadoop04:2181 ,hadoop05:2181
指定 hbase 在 zookeeper 中使用的根目录
set zookeeper.znode .parent =/hbase
加入指定的处理 jar
add jar /home/hadoop/apps/apache-hive-2.3 .2 -bin/lib/hive-hbase-handler-2.3 .2 .jar
1.3创建基于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" ,"hbase.mapred.output.outputtable" ="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" );