0884-7.1.6-如何在CDP中集成Hive on HBase

2022-08-26 17:48:11 浏览数 (1)

1.文档编写目的

本篇文章主要介绍如何在Hive中集成HBase,将HBase表映射成Hive表,实现在beeline中查询或者修改HBase的表数据。

  • 测试环境

1.集群是Cloudera Enterprise 7.3.1和Cloudera Runtime 7.1.6

2.系统均为RedHat 7.6

3.集群已启用 Kerberos

4.OpenLADP 2.4.44-23.el7_9

2.配置HBase与Hive集成

1.登录CM,下载HBase的配置文件,解压后打开hbase-site.xml

2.在安装了HBase的服务器节点输入命令:

代码语言:javascript复制
hbase mapredcp|tr : ,

注意:这个命令已经将输出“:”替换成英文逗号“,”分隔。

3.去Hive服务下,配置,hive-site.xml 的 Hive 服务高级配置代码段(安全阀)

代码语言:javascript复制
<property>
<name>hive.aux.jars.path</name>
<value>
上面hbase mapredcp命令输出内容
</value>
</property>
<property>
上面步骤中hbase-site.xml文件的内容
</property>

上面的配置完成后,保存并重启Hive 服务。

3.测试

1、在hbase shell中创建HBase表

代码语言:javascript复制
create "test", "C1"
put "test", "01", "C1:ID", "0001"
put "test", "01", "C1:Name", "aa"
put "test", "01", "C1:Company", "company1"

2、在beeline中创建hive表映射到hbase,可以查询到数据

代码语言:javascript复制
CREATE EXTERNAL TABLE `hbase_table_test`(
    `key` string,
    `id` string,
    `name` string,
    `company` string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ('hbase.columns.mapping'=':key,C1:ID,C1:Name,C1:Company')
TBLPROPERTIES ('hbase.mapred.output.outputtable'='test','hbase.table.name'='test');

3、插入数据

代码语言:javascript复制
insert into hbase_table_test values("03", "0003", "bb", "company3");

4、查看hbase已经插入了对应的内容

代码语言:javascript复制
INSERT OVERWRITE TABLE hbase_table_test SELECT key, "0002" AS id, "abc" AS name, "company2" AS company FROM hbase_table_test WHERE key="03";

修改成功。

5、验证内部表和外部表区别

代码语言:javascript复制
CREATE TABLE `hbase_table_no`(
    `key` int,
    `id` string,
    `name` string,
    `company` string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ('hbase.columns.mapping'=':key,C1:ID,C1:Name,C1:Company')
TBLPROPERTIES ('hbase.mapred.output.outputtable'='no','hbase.table.name'='no');
CREATE EXTERNAL TABLE `hbase_table_no1`(
    `key` int,
    `id` string,
    `name` string,
    `company` string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ('hbase.columns.mapping'=':key,C1:ID,C1:Name,C1:Company')
TBLPROPERTIES ('hbase.mapred.output.outputtable'='no1','hbase.table.name'='no1');

5、分别插入数据后,drop table

代码语言:javascript复制
insert into hbase_table_no values (1, "id", "name", "com");
insert into hbase_table_no1 values (1, "id", "name", "com");
drop table hbase_table_no;
drop table hbase_table_no1;
代码语言:javascript复制
代码语言:javascript复制
6、查看hbase,发现只有no1存在。
代码语言:javascript复制

4.总结

1、“hbase mapredcp|tr : ,”为将前面输入的“:”替换为“,”。

2、建立的hive表只是建立的映射关系,任何修改会在HBase表中生效。

3、无论内部表或者外部表都可以指定一个不存在的HBase表,两种表的区别在于内部表多了两个属性

代码语言:javascript复制
'TRANSLATED_TO_EXTERNAL'='TRUE'
'external.table.purge'='TRUE'
代码语言:javascript复制

4、在Hive中drop table内部表(不加EXTERNAL)会删除掉关联的HBase表,在Hive中drop table外部表(加EXTERNAL)会保留关联的HBase表。

0 人点赞