依赖条件

已有Hadoop、Hive、Zookeeper、HBase 环境。

为什么Hive要映射Hbase

HBase 只提供了简单的基于 Key 值的快速查询能力,没法进行大量的条件查询,对于数据分析来说,不太友好。

hive 映射 hbase 为用户提供一种 sqlOnHbase 的方法。Hive 与 HBase 整合的实现是利用两者本身对外的 API 接口互相通信来完成的,其具体工作交由 Hive 的 lib 目录中的 hive-hbase-handler-xxx.jar 工具类来实现对 HBase 数据的读取。

Hive 和 HBase 通过接口互通,用户可以方便地通过 SQL 接口进行建表、映射表、查询、删除等操作。 使用 Hive 操作 HBase 中的表,只是提供了便捷性,由于对于 hiveOnHbase 表的查询走 MR 框架,因此查询效率较为缓慢需酌情使用。 Hive 集成 HBase 可以有效利用 HBase 数据库的存储特性,如行更新和列索引等。在集成的过程中注意维持 HBase jar 包的一致性。Hive 集成 HBase 需要在 Hive 表和 HBase 表之间建立映射关系,也就是 Hive 表的列 (columns) 和列类型(column types)与 HBase 表的列族(column families)及列限定词(column qualifiers)建立关联。

每一个在 Hive 表中的域都存在于 HBase 中,而在 Hive 表中不需要包含所有HBase 中的列。HBase 中的 RowKey 对应到 Hive 中为选择一个域使用 :key 来对应,列族(cf:)映射到 Hive 中的其它所有域,列为(cf:cq)。

 关闭服务

[root@hadoop3 ~]# stop-hbase.sh

[root@hadoop3 ~]# zkServer.sh stop

[root@hadoop3 ~]# stop-alll.sh

如果还有hive进程则需要把他 kiil 掉

修改配置文件

修改hive-site.xml文件

[root@hadoop3 ~]# cd /opt/soft/hive312/conf/ [root@hadoop3 conf]# vim ./hive-site.xml

里面添加

hive.zookeeper.quorum

192.168.152.192

hbase.zookeeper.quorum

192.168.152.192

hive.aux.jars.path

file:///opt/soft/hive312/lib/hive-hbase-handler-3.1.2.jar,file:///opt/soft/hive312/lib/zookeeper-3.4.6.jar,file:///opt/soft/hive312/lib/hbase-client-2.3.5.jar,file:///opt/soft/hive312/lib/hbase-common-2.3.5-tests.jar,file:///opt/soft/hive312/lib/hbase-server-2.3.5.jar,file:///opt/soft/hive312/lib/hbase-common-2.3.5.jar,file:///opt/soft/hive312/lib/hbase-protocol-2.3.5.jar,file:///opt/soft/hive312/lib/htrace-core-3.2.0-incubating.jar

TIP:

设置jar哪一个property里面不能有空格回车

 拷贝jar包

将hbase里面的jar包拷贝到hive里面

[root@hadoop3 lib]# cp /opt/soft/hbase235/lib /opt/soft/hive312/lib

是否覆盖内容:否:输入n回车即可,也可以选择覆盖

删除和拷贝guava文件

先查看guava

[root@hadoop3 lib]# find ../lib/guava*

删除除了27以外的所有jar包

[root@hadoop3 lib]# rm -rf ../lib/guava-11.0.2.jar

hbase也一样

将hive里面的guav文件拷贝到hbase里面

[root@hadoop3 lib]# cp /opt/soft/hive312/lib/guava-27.0-jre.jar ./

启动服务

启动Hadoop :start-all.sh

启动zookeeoer :zkServer.sh start

启动hive : hive --service hiveserver2

                    beeline -u jdbc:hive2://192.168.152.192:10000

启动hbase :start-hbase.sh

进入hbase :hbase shell

测试

使用DataGrip

create external table students(

id string,

name string,

school string

)

stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with

serdeproperties ("hbase.columns.mapping" = ":key,info1:name,info2:school")

tblproperties ("hbase.table.name" = "test:student");

select * from students;

参数详解:

stored by指定数据的存储方式serdeproperties:表示字段映射,对应hive中的表字段的顺序,需要注意的是 :key指的是Hbase中的rowdy,hive表中要有一个key字段与之对应,否则会报错的。tblproperties:表示表名映射,指定需要映射的Hbase表名。org.apache.hadoop.hive.hbase.HBaseStorageHandler:指定处理的存储器,就是 hive-hbase-handler-*.jar 包,要做 hive 和 hbase 的集成必须要加上这一句hbase.columns.mapping:定义 hive 表中的字段与 hbase 的列族映射hbase.table.name:用户想在 Hive 和 HBase 中使用不同表名时才需要填写。

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: