Hive支持通过内表或外表两种方式访问E-MapReduce(简称EMR)中的Phoenix数据。本文通过示例为您介绍如何使用EMR上的Hive处理EMR Phoenix数据。
前提条件
已创建Hadoop集群,并且选择了HBase、Zookeeper和Phoenix服务,详情请参见
创建集群。
说明 因为当前EMR-4.x和EMR-5.x系列版本未支持Phoenix服务,所以此文档仅适用于EMR-3.x系列版本。
Hive通过内表访问Phoenix
如果Phoenix中没有已经创建好的表,则可以在Hive中创建表,存储到Phoenix中。本示例是在Hive中新建表访问Phoenix。
- 进入Hive命令行。
- 使用SSH方式登录到集群主节点,详情请参见登录集群。
- 执行以下命令,进入Hive命令行。
hive
返回信息如下所示时,表示进入Hive命令行。
Logging initialized using configuration in file:/etc/ecm/hive-conf-2.3.5-2.0.3/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
- 在Hive中创建并查询表数据。
- 执行以下命令,在Hive中创建Phoenix表。
create table phoenix_hive_create_internal(s1 string,i1 int,f1 float,d1 double)
stored by 'org.apache.phoenix.hive.PhoenixStorageHandler'
tblproperties(
"phoenix.table.name" = "phoenix_hive_create_internal",
"phoenix.rowkeys" = "s1,i1",
"phoenix.column.mapping" = "s1:s1,i1:i1,f1:f1,d1:d1",
"phoenix.table.options" = "SALT_BUCKETS=10,DATA_BLOCK_ENCODING='DIFF'"
);
说明 表的存储方式是PhoenixStorageHandler,可以存储和读取Phoenix数据。
- 执行以下命令,向表中插入数据。
insert into phoenix_hive_create_internal values('wyk',1,2.3412,3.14);
- 执行以下命令,查看表数据。
select * from phoenix_hive_create_internal;
返回信息如下。
OK
wyk 1 2.3412 3.14
Time taken: 0.569 seconds, Fetched: 1 row(s)
- 进入Phoenix命令行。
- 使用SSH方式登录到集群主节点,详情请参见登录集群。
- 执行以下命令,进入phoenix-current目录。
cd /usr/lib/phoenix-current/
- 执行以下命令,进入Phoenix命令行。
- 执行以下命令,在Phoenix中查看Hive写的数据是否已存在。
select * from phoenix_hive_create_internal;
返回信息如下。
+------+-----+---------+-------+
| s1 | i1 | f1 | d1 |
+------+-----+---------+-------+
| wyk | 1 | 2.3412 | 3.14 |
+------+-----+---------+-------+
说明 查看数据已存在,并且与在Hive中插入的数据一致,说明Hive已经成功访问了Phoenix的数据。
Hive通过外表访问Phoenix
如果已经在Phoenix中创建了表phoenix_hive_create_internal,想通过Hive访问,则可以使用Hive外表的方式与Phoenix中的表建立映射关系,进而通过Hive访问Phoenix中已经存在的表。
- 进入Hive命令行。
- 使用SSH方式登录到集群主节点,详情请参见登录集群。
- 执行以下命令,进入Hive命令行。
hive
返回信息如下所示时,表示进入Hive命令行。
Logging initialized using configuration in file:/etc/ecm/hive-conf-2.3.5-2.0.3/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
- 执行以下命令,在Hive中创建外表,建立与Phoenix表的映射关系。
create external table ext_table(
s1 string,
i1 int,
f1 float,
d1 double
)
stored by 'org.apache.phoenix.hive.PhoenixStorageHandler'
tblproperties(
"phoenix.table.name" = "phoenix_hive_create_internal",
"phoenix.rowkeys" = "s1, i1",
"phoenix.column.mapping" = "s1:s1, i1:i1, f1:f1, d1:d1"
);
- 执行以下命令,在Hive中查看Phoenix表的数据。
select * from ext_table;
如果可以正常查询数据,说明Hive已经成功访问了Phoenix的数据。