hbase与hive的集成

HBase 与 Hive 的对比

1.Hive
(1)数据仓库
Hive 的本质其实就相当于将 HDFS 中已经存储的文件在 Mysql 中做了一个双射关系,以方便使用 HQL 去管理查询。可以说hive就是一个映射数据为表结构的工具。
(2)用于数据分析、清洗
Hive 适用于离线的数据分析和清洗,延迟较高。
(3)基于 HDFS、MapReduce
Hive 存储的数据依旧在 DataNode 上,编写的 HQL 语句终将是转换为MapReduce 代码执行。属于hdfs管理数据
2.HBase
(1)数据库
是一种面向列存储的非关系型数据库。低层是以每一列进行存储的。
(2)用于存储结构化和非结构化的数据
适用于单表非关系型数据的存储,不适合做关联查询,类似 JOIN 等操作。
(3)基于 HDFS
数据持久化存储的体现形式是 HFile,存放于 DataNode 中,被 ResionServer以 Region 的形式进行管理。文件存储在hdfs上,但是是hbase自己管理。
(4)延迟较低,接入在线业务使用
面对大量的企业数据,HBase 可以直线单表大量数据的存储,同时提供了高效的数据访问速度。
**

2.2 HBase 与 Hive 集成使用

**

作者目前使用的 HBase 与 Hive 版本是 CDH5.14.2,不需要做配置即可使用,
如果采用 Apache 的版本,可能需要自己整合 HBase 一些 Jar 包到 Hive 的 lib 目录中,这个可以查找相关资料。
1.案例一
目标:建立 Hive 表,关联 HBase 表,插入数据到 Hive 表的同时能够影响 HBase
表。
分步实现:
(1)在 Hive 中创建表同时关联 HBase
注意:-- Hive 中只支持 select 和 insert,不支持 HBase 中的版本控制。
– 在 hive 中创建外部表

create external table customer(
name string, order_numb string,order_date string,addr_city string,addr_state string)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties
("hbase.columns.mapping"=":key,order:numb,order:date,addr:city,addr:state")
tblproperties("hbase.table.name" = "customer");

提示:完成之后,可以分别进入 Hive 和 HBase 查看,都生成了对应的表
(2)向 hive 表中插入数据,在 hive 中执行如下语句。
hive> insert into table customer values (‘James’,‘1121’,‘2018-05-31’,‘toronto’,‘ON’);
(3)在 HBase Shell 中查看表中的记录。
hbase(main):002:0> scan ‘customer’
(4)可以在 HBase 中插入数据,然后在 Hive 表中查看更新的数据。
hbase(main):002:0> put ‘customer’,‘3’,‘order:numb’,‘1800’
hive> select * from customer;
2.案例二
目标:在 HBase 中已经存储了某一张表 customer,然后在 Hive 中创建一个
外部表来关联 HBase 中的 customer 这张表,使之可以借助 Hive 来分析 HBase 这
张表中的数据。
注:该案例 2 紧跟案例 1 的脚步,所以完成此案例前,请先完成案例 1。 (1)在 Hive 中创建外部表

create external table relevance_customer(
name string, order_numb string,order_date string,addr_city string,addr_state string)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties
("hbase.columns.mapping"=":key,order:numb,order:date,addr:city,addr:state")
tblproperties("hbase.table.name" = "customer");

(2)关联后就可以使用 Hive 函数进行一些分析操作了

hive (default)> select * from relevance_customer;