HBase集成Hive的总结

一、hbase为什么要集成hive:

HBase是一个NoSQL数据库!一般用作对海量大表数据的实时读写,不支持复杂的查询!

Hive是一个数据仓库软件!Hive主要用来对数据仓库中的数据进行分析!Hive支持使用HQL对表中的数据进行查询!

Hive ----> HQL----->HDFS上的数据----->MR

HBase---->API---->HDFS上的数据----->MR

可以让hive集成HBase,hbase作为数据存储的介质!hive作为分析引擎,来分析Hbase中已经存储的数据!

hbase中数据的逻辑结构是一个表,hive对表中的结构化数据进行分析!

二、两种场景:

1、数据已经在hbase中,只需要根据hbase中已经有的表的结构,在hive中进行参照,创建hive中的表

1 CREATE external TABLE hive_HBase_dept_table(
2 deptid int,
3 deptname string,
4 num int
5 )
6 STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
7 WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:deptname,info:num")
8 TBLPROPERTIES ("hbase.table.name" = "dept");

代码的相关说明:

1、创建的表应该是外部表,原因:数据在hbase中,hive不在维护

2、stored by:代表向表中读写数据时,借助此handler类完成操作(数据在hbase中,没有存在hdfs上)

3、在进行映射时,字段的顺序要和列的顺序一致

4、hive中的列的类型要和hase中的数据类型一致,或者需要保证转换不能失败

2、数据还没有导入hbase中,可以现在hive中建表,在hive的表中执行insert语句,将数据导入到hbase中

1 CREATE  TABLE hive_HBase_dept2_table(
2 deptid int,
3 deptname string,
4 num int
5 )
6 STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
7 WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:deptname,info:num")
8 TBLPROPERTIES ("hbase.table.name" = "dept2");

代码的相关说明:

1、这种情况hive负责数据的生命周期,所以hive应该为管理表

2、注意handler的jar包版本要与hbase的版本匹配

原文地址:https://www.cnblogs.com/atBruce/p/12555653.html