zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

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

HBase集成On 如何 hive CDP 7.1
2023-06-13 09:11:31 时间

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的服务器节点输入命令:

hbase mapredcp|tr : ,

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

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

<property>
<name>hive.aux.jars.path</name>
<value>
上面hbase mapredcp命令输出内容
</value>
</property>
<property>
上面步骤中hbase-site.xml文件的内容
</property>

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

3.测试

1、在hbase shell中创建HBase表

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,可以查询到数据

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、插入数据

insert into hbase_table_test values("03", "0003", "bb", "company3");

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

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、验证内部表和外部表区别

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

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;
6、查看hbase,发现只有no1存在。

4.总结

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

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

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

'TRANSLATED_TO_EXTERNAL'='TRUE'
'external.table.purge'='TRUE'

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