配置Hive访问HBase数据
操作场景
Hive on HBase即是允许用户通过Hive的SQL接口查询和操作存储在HBase中的数据,将HBase的高效存储和实时读写能力与Hive的SQL查询能力相结合,提供了一种灵活且高效的数据处理方式。
在MRS中,Hive支持通过内部表和外部表两种方式来访问和处理存储在HBase中的数据。本文通过示例为您介绍,如何使用MRS上的Hive处理MRS HBase数据。
前提条件
- 已安装集群客户端,具体请参考安装客户端章节。例如安装目录为“/opt/hadoopclient”,以下操作的客户端目录只是举例,请根据实际安装目录修改。
- 集群已启用Kerberos认证(安全模式),需准备用于创建Hive on HBase表的用户,该用户需属于“hive”用户组,并配置HBase相关权限:
- 如果HBase启用了Ranger鉴权,则需参考添加HBase的Ranger访问权限策略为该用户配置创建表、写入数据和读取数据的权限。
- 如果HBase未启用Ranger鉴权,则需参考创建HBase权限角色为该用户配置创建表、写入数据和读取数据的权限。
Hive通过内表访问HBase
如果HBase中没有已经创建好的表,则可以在Hive中创建表,Hive会自动把表结构和数据写入到HBase中。以下示例为在Hive中新建表访问HBase。
- 以客户端安装用户登录安装客户端的节点,执行以下命令配置环境变量并认证用户。
切换至客户端安装目录:
cd 客户端安装目录
加载环境变量:
source bigdata_env
认证用户,未开启Kerberos认证的集群请跳过该步骤:
kinit Hive业务用户
- 执行以下命令登录Hive客户端:
beeline
- 在Hive中创建HBase表,插入并查看表数据。
- 执行以下命令,在Hive中创建HBase表,例如“hive_hbase_table”:
create table hive_hbase_table(id int, name string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties ("hbase.columns.mapping" = ":key,cf1:name") tblproperties ("hbase.table.name" = "hive_hbase_table");
- 执行以下命令,向表中插入数据:
insert into table hive_hbase_table values(12,'abab');
- 执行以下命令,查看表数据:
select * from hive_hbase_table;
查看到的表数据为:
图1 查看Hive表数据
- 执行以下命令,在Hive中创建HBase表,例如“hive_hbase_table”:
- 执行以下命令退出Hive客户端:
!q
- 执行以下命令登录HBase客户端:
hbase shell
- 执行以下命令,查看是否已经通过Hive在HBase中创建了表:
describe 'hive_hbase_table'
命令执行后,回显结果图2所示,即表示已经通过Hive在HBase中创建了表“hive_hbase_table”。
- 执行以下命令,在HBase中查看Hive写的数据是否已存在:
scan 'hive_hbase_table'
查看到的数据与3.b插入的数据一致,则说明已成功在Hive中创建了HBase表。
图3 查看HBase表数据
Hive通过外表访问HBase
如果已经在HBase中创建了表,想通过Hive访问,则可以使用Hive外表的方式与HBase中的表建立映射关系,进而通过Hive访问HBase中已经存在的表。
- 以客户端安装用户登录安装客户端的节点,执行以下命令配置环境变量并认证用户。
切换至客户端安装目录:
cd 客户端安装目录
加载环境变量:
source bigdata_env
认证用户,未开启Kerberos认证的集群请跳过该步骤:
kinit Hive业务用户
- 执行以下命令登录HBase客户端:
hbase shell
- 在HBase中创建并查询表数据。
- 执行Ctrl + C退出HBase客户端。
- 执行以下命令登录Hive客户端:
beeline
- 在Hive中创建外表,并与HBase中的表建立映射关系。
create external table hbase_table(key int,col1 string,col2 string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = "f:col1,f:col2") tblproperties("hbase.table.name" = "hbase_table", "hbase.mapred.output.outputtable" = "hbase_table");
- 执行以下命令,在Hive中查看“hbase_table”数据:
select * from hbase_table;
查看到的数据与3.b插入的数据一致,则说明已成功在Hive中创建了HBase外表。
图5 查看Hive表数据
相关文档
- 配置跨集群互信后,如需使用Hive on HBase,具体操作请参见配置Hive访问跨集群的HBase数据。
- 如需清除Hive对应的HBase表中符合条件的一条或者多条数据,具体操作请参见删除Hive on HBase表中的单行记录。