特别说明:该专栏文章均来源自微信公众号【大数据实战演练】,欢迎关注!
版本说明:
HDP:3.0.1.0
Hive:3.1.0
HBase:2.0.0
一、前言
之前学习 HBase 就有疑惑,HBase 虽然可以存储数亿或数十亿行数据,但是对于数据分析来说,不太友好,只提供了简单的基于 Key 值的快速查询能力,没法进行大量的条件查询。
不过,Hive 与 HBase 的整合可以实现我们的这个目标。不仅如此,还能通过 Hive 将数据批量地导入到 HBase 中。
Hive 与 HBase 整合的实现是利用两者本身对外的 API 接口互相通信来完成的,其具体工作交由 Hive 的 lib 目录中的 hive-hbase-handler-xxx.jar 工具类来实现对 HBase 数据的读取。
二、适用场景
Hive 与 HBase 整合的适用场景:
1、通过 Hive 与 HBase 整合,可以将 HBase 的数据通过 Hive 来分析,让 HBase 支持 JOIN、GROUP 等 SQL 查询语法。
2、实现将批量数据导入到 HBase 表中。
三、依赖条件
需要有以下依赖,ambari 已经为我们做好了这一切:
- 已有 HDFS、MapReduce、Hive、Zookeeper、HBase 环境。
- 确保 Hive 的 lib 目录下有 hive-hbase-handler-xxx.jar、Zookeeper jar、HBase Server jar、HBase Client jar 包。
四、使用HBase Hive集成
注意,这里与HDP 2.x不同:在 HDP 3.0 中对 Hive-3.1.0 的更改是所有 StorageHandler必须标记为“外部”,没有 StorageHandler 创建的非外部表。如果在创建 Hive 表时存在相应的 HBase 表,它将模仿“外部”表的 HDP 2.x 语义。如果在创建 Hive 表时不存在相应的 HBase 表,则它将模仿非外部表的 HDP 2.x 语义。
总结: 不管 HBase 表是否存在,在 Hive 中都要使用 external 表来与 HBase 表进行关联,如果关联的