使用场景
1.通过Hive把数据加载到HBase中,数据源可以是文件也能是表。HBase集成Hive后,hive表数据增加的同时,HBase中的数据也会增加。
2.HBase的查询不支持join和group by。可以通过Hive整合HBase的方式让HBase支持这些操作(先把HBase的数据加载到Hive中,通过Hive的语法来join和group by)。
3.HBase实时的插入数据,或者周期性的加载数据文件,通过Hive直接查询这些数据,Hive不用再加载一次数据了。
4.结合Hive的数据分析和HBase实时数据的优点。
Hive映射HBase表
Storage Handlers :Hive的字段和HBase中的列都是通过Storage Handler来维护的。创捷Hive表把存储格式指定为Storage Handler。这个程序被编译成一个独立的模块,在Java中它就是一个独立的jar包hive-hbase-handler-X.X.X.jar,Hive的客户端必须要能识别到这个jar包,通过--auxpath来指定。
Hive启动方式:直接拷贝HBase所有lib下Jar包到Hive lib中。然后直接启动hive。
cd /app/hive/lib
cp /app/hbase/lib/* /app/hive/lib
cd /app/hive/bin
hive
Hive集成HBase可以有效利用HBase的存储特性,如更新和列索引等。
Hive表与HBase表之间需要建立映射关系
每个在Hive表中的域都存在HBase中,而在Hive表中不需要包含所有HBase中的列
create table tablename(
key int,
value string
)stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping"=":rowkey,cf1:value")
tblproperties("hbase.table.name"="xyz")
不用提前在HBase中创建表,它会自动创建。
创建hive表指定hbase映射的例子。
create table hiveonhbase(
key int,
value string
)stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping"=":key,cf1:value")
tblproperties("hbase.table.name"="hiveonhbase")
查看HBase中是否有了这张表。
这张hive表已经映射了hbase的表,所以往这张hive表写数据要用insert select的方式。整合的表不能修改。
创建一张表test,load数据进去,之后hiveonhbase表会insert select from test表的数据
create table testhiveonhbase(
key int,
value string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';
load data local inpath '/app/hive/testData/testhiveonhbase.txt' overwrite into table testhiveonhbase;
通过查询的方式把test表的数据加载到hiveonhbse
insert overwrite table hiveonhbase select * from testhiveonhbase;
查看hive中hiveonhbase表是否有数据
select * from hiveonhbase;
查看hbase中hiveonhbase表是否有数据
scan 'hiveonhbase'
对于HBase中已有的表做Hive映射
这样创建外表
create external table hiveonhbase_wc(
key string,
word string,
value string
)stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping"=":key,cf:word,cf:value")
tblproperties("hbase.table.name"="wc");
查看hive上是否有HBase已经建立好的表的数据
select * from hiveonhbase_wc;