0884-7.1.6-如何在CDP中集成Hive on HBase
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表。
相关文章
- hbase 过滤数据
- HBase面试题「建议收藏」
- 大数据之Phonenix与Hbase集成
- HBase基本原理
- Hive和Hbase集成及互相操作
- HBase shell 命令介绍
- 通用MapReduce程序复制HBase表数据
- HBase学习之路 (八)HBase大牛博客详解大数据
- hbase遇到问题及解决方法详解大数据
- HBase Region合并分析详解大数据
- 剖析HBase负载均衡和性能指标详解大数据
- HBase 写优化之 BulkLoad 实现数据快速入库详解编程语言
- HBase-1.2.1之查找Region位置的源码学习详解编程语言
- 利用Neo4j与HBase提升数据库性能(neo4jhbase)
- 详解hbase搭建遇到问题及解决方法
- HBase与Oracle 比较两款数据库的优缺点(hbase和oracle)
- 比较:MYSQL与HBASE 数据库管理系统的异同(mysql与hbase)
- Redis实现从HBase中批量读取数据(redis读取hbase)