在阿里云E-MapReduce(EMR)中,Hive支持通过内部表和外部表两种方式来访问和处理存储在HBase中的数据。本文通过示例为您介绍,如何使用EMR上的Hive处理EMR HBase数据。
前提条件
Hive通过内表访问HBase
如果HBase中没有已经创建好的表,则可以在Hive中创建表,Hive会自动把表结构和数据写入到HBase中。本示例是在Hive中新建表访问HBase。
执行以下命令,进入Hive命令行。
hive
- 在Hive中创建并查询表数据。
- 执行以下命令,在Hive中创建HBase表。
create table hive_hbase_table(key int, value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,cf1:val") tblproperties("hbase.table.name" = "hive_hbase_table", "hbase.mapred.output.outputtable" = "hive_hbase_table");
说明 表的存储方式是HBaseStorageHandler,可以存储和读取HBase数据。 - 执行以下命令,向表中插入数据。
insert into hive_hbase_table values(212,'bab');
- 执行以下命令,查看表数据。
select * from hive_hbase_table;
返回信息如下。OK 212 bab Time taken: 0.337 seconds, Fetched: 1 row(s)
- 执行以下命令,在Hive中创建HBase表。
退出Hive命令行后,执行以下命令,进入HBase命令行。
hbase shell
执行以下命令,查看是否已经通过Hive在HBase中创建了表。
describe 'hive_hbase_table'
返回信息如下。
说明查看表已存在,说明Hive已经在HBase中创建了表。
执行以下命令,在HBase中查看Hive写的数据是否已存在。
scan 'hive_hbase_table'
返回信息如下。
ROW COLUMN+CELL 212 column=cf1:val, timestamp=****, value=bab 1 row(s) in 0.2320 seconds
说明查看数据已存在,并且与在Hive中插入的数据一致,说明Hive已经成功访问了HBase的数据。
Hive通过外表访问HBase
如果已经在HBase中创建了表,想通过Hive访问,则可以使用Hive外表的方式与HBase中的表建立映射关系,进而通过Hive访问HBase中已经存在的表。
退出Hive命令行后,执行以下命令,进入HBase命令行。
hbase shell
- 在HBase中创建并查询表数据。
- 执行以下命令,在HBase中创建表。
create 'hbase_table','f'
- 执行以下命令,向表中插入数据。
put 'hbase_table','1122','f:col1','hello'
- 执行以下命令,查看表数据。
scan 'hbase_table'
返回信息如下。ROW COLUMN+CELL 1122 column=f:col1, timestamp=1627027165760, value=hello 1 row(s) in 0.0170 seconds
- 执行以下命令,在HBase中创建表。
退出HBase命令行后,执行以下命令,进入Hive命令行。
hive
- 执行以下命令,在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;
返回信息如下。
1122 hello NULL
说明查看数据已存在,并且与在HBase中插入的数据一致,说明Hive已经成功访问了HBase的数据。
EMR HBase开启Kerberos
如果EMR HBase开启了Kerberos,Hive关联HBase表并进行查询时,则需要设置Kerberos相关参数,设置方式有以下两种:
Hive命令行设置
set hbase.security.authentication=kerberos; set hbase.master.kerberos.principal=hbase/_HOST@EMR.${CLUSTER_ID}.COM; set hbase.regionserver.kerberos.principal=hbase/_HOST@EMR.${CLUSTER_ID}.COM; set hbase.zookeeper.quorum=master-1-1;
环境变量设置
env HIVE_OPTS="-hiveconf hbase.security.authentication=kerberos -hiveconf hbase.master.kerberos.principal=hbase/_HOST@EMR.${CLUSTER_ID}.COM -hiveconf hbase.regionserver.kerberos.principal=hbase/_HOST@EMR.${CLUSTER_ID}.COM -hiveconf hbase.zookeeper.quorum=master-1-1" hive
${CLUSTER_ID}
获取方式,可以登录集群节点,执行hostname
命令,命令返回值中'.'后以'c-'开头到结尾的字符串转换为大写即可。
相关文档
如需访问云数据库HBase的数据,详情请参见Hive访问云HBase数据。