Hive集成Phoenix 您所在的位置:网站首页 hive到hbase Hive集成Phoenix

Hive集成Phoenix

#Hive集成Phoenix| 来源: 网络整理| 查看: 265

Hive支持使用HDFS之外的存储系统作为底层存储系统,其中官方明确支持HBase,Kudu,Druid和JDBC(MySQL等)。

Hive提供了相应的接口 StorageHandlers,用以实现和其他存储系统的整合。

Phoenix实现了相应的接口,可以使用Phoenix作为Hive的底层存储系统,在Hive中操作Phoenix表,并和Hive本地表进行互操作。

Phoenix官网该特性的详细描述可参考 Phoenix Storage Handler for Apache Hive。

本文主要描述在CDH集群中如何集成Hive和Phoenix,及其基本使用和注意事项。

在CDH集群中,部署Phoenix后,可以通过配置Hive,以启用Hive使用Phoenix作为底层存储的特性。

配置 准备Phoenix-Hive连接器

在运行有Hive服务的所有集群节点,创建一个Hive可读的目录,将 opt/cloudera/parcels/PHOENIX/lib/phoenix/phoenix--hive.jar 复制到这个目录。

例如,创建目录 /opt/hive/phoenix-hive ,复制 /opt/cloudera/parcels/PHOENIX/lib/phoenix/phoenix-5.0.0-cdh6.2.0-hive.jar 到该目录下。

配置Hive

导航到Cloudera Manager中Hive服务的配置。

编辑配置 Hive 辅助 JAR 目录 ,值为 /opt/hive/phoenix-hive。

编辑配置 hive-site.xml 的 Hive 服务高级配置代码段(安全阀),添加属性:

属性值hive.aux.jars.pathfile:///opt/cloudera/parcels/PHOENIX/lib/phoenix-5.0.0-cdh6.2.0-hive.jar

编辑配置 hive-site.xml 的 Hive 客户端高级配置代码段(安全阀),添加属性:

属性值hive.aux.jars.pathfile:///opt/cloudera/parcels/PHOENIX/lib/phoenix-5.0.0-cdh6.2.0-hive.jar

保存并按照提示重启。

Phoenix-Hive使用 建表

Hive有 managed vs external 两种表,在使用Phoenix作为底层存储时,概念不变。

创建managed表

Hive完全管理表和数据。

create table phoenix_table ( s1 string, i1 int, f1 float, d1 double ) STORED BY 'org.apache.phoenix.hive.PhoenixStorageHandler' TBLPROPERTIES ( "phoenix.table.name" = "phoenix_table", "phoenix.zookeeper.quorum" = "localhost", "phoenix.zookeeper.znode.parent" = "/hbase", "phoenix.zookeeper.client.port" = "2181", "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'" ); 创建external表

Hive只管理表的元数据。

在创建external表之前,Phoenix表必须已经存在。

create external table ext_table ( i1 int, s1 string, f1 float, d1 decimal ) STORED BY 'org.apache.phoenix.hive.PhoenixStorageHandler' TBLPROPERTIES ( "phoenix.table.name" = "ext_table", "phoenix.zookeeper.quorum" = "localhost", "phoenix.zookeeper.znode.parent" = "/hbase", "phoenix.zookeeper.client.port" = "2181", "phoenix.rowkeys" = "i1", "phoenix.column.mapping" = "i1:i1, s1:s1, f1:f1, d1:d1" ); 属性说明 属性说明phoenix.table.name指定Phoenix表名。默认同Hive表名。phoenix.zookeeper.quorum指定HBase的ZooKeeper quorum。默认localhost。phoenix.zookeeper.znode.parent指定HBase的ZooKeeper parent node。默认/hbase。phoenix.zookeeper.client.portZooKeeper端口。默认2181。phoenix.rowkeysPhoenix表的primary key的列的列表。phoenix.column.mappingHive表和Phoenix表的列映射。需要注意Phoenix表区分大小写,默认是大写。 插入,更新和删除

Phoenix-Hive在使用上有一些限制,Cloudera官方文档和Phoenix官方文档都提出了一些限制,但是略有不同,下面给出链接: https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/phoenix_hive_connector.html#concept_esk_t4h_43b http://phoenix.apache.org/hive_storage_handler.html#Limitations 如果使用Cloudera Phoenix,以Cloudera文档为主。

由于这些限制,使用建议如下:

Hive端只用于插入数据

Phoenix端可以插入,更新和删除数据。

使用示例:

Hive

insert into table T values (....); insert into table T select c1,c2,c3 from source_table;

Phoenix

upsert into table T values (.....); Phoenix CSV BulkLoad tools 查询数据

在Hive端查询数据时,单表查询可以达到和Phoenix客户端一样的速度,只需要设置:

set hive.fetch.task.conversion=more set hive.exec.parallel=true

在查询数据时,还可以配置其他,如下:

参数默认值描述hbase.scan.cache100单元请求读取的行大小hbase.scan.cacheblockfalse是否缓存块split.by.statsfalse如果设置为true,mapper使用表statistics,每个guidepost一个mapper。了解 Statistics Collection。[hive-table-name].reducer.count1reducers数量。在Tez模式下,这仅影响单表查询。详情请看Limitations。[phoenix-table-name].query.hintPhoenix查询Hint。详情请看 Hint。 性能调试

性能调试可参考 Tuning。

其他:

https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/phoenix_performance_tuning.html

http://phoenix.apache.org/hive_storage_handler.html#Performance%20Tuning



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有