HBase Hive整合

本次整合使用的是cdh5.5.0的版本(伪分布式环境下)

首先 需要在$HIVE_HOME/lib下添加以下jar包

 
guava-14.0.1.jar
hbase-common-1.0.0-cdh5.5.0.jar 
hbase-server-1.0.0-cdh5.5.0.jar 
hbase-client-1.0.0-cdh5.5.0.jar 
hbase-protocol-1.0.0-cdh5.5.0.jar
hbase-it-1.0.0-cdh5.5.0.jar
htrace-core-3.2.0-incubating.jar
hive-hbase-handler-1.1.0-cdh5.5.0.jar
zookeeper-3.4.5-cdh5.5.0.jar


没有的从HBase的lib目录下拷贝(或者建立软连接)

存在同一jar包但是版本不一致时,统一版本


测试:

整合后,存在两种表的创建

1、管理表

创建hive表的时候,指定数据存储在hbase表中

 
CREATE TABLE hbase_table_1(key int, value string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "xyz", "hbase.mapred.output.outputtable" = "xyz");


  • 这种方式,在向hive中的表插入数据时,数据是存在hbase中的,即HDFS上的hive表的文件夹下为空。用flush命令,会发现数据存在hbase相关文件夹下。
  • 这种方式删除hive中的表,hbase下的表同样也会删除。

2、外部表

对已有的HBase表中的数据进行分析。(EXTERNAL关键字)

CREATE EXTERNAL TABLE hbase_user(id int, name string, age int, sex string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age,info:sex")
TBLPROPERTIES ("hbase.table.name" = "user", "hbase.mapred.output.outputtable" = "user");

  • 这种方式会将HBASE中的已存在的表的信息(列族,列信息等)复制一份到HIVE中,可以进行分析。
  • 删除HIVE中的这张表对HBASE的表无影响。



 

你可能感兴趣的:(Hive,HBase)