Hive实战处理(二十三)hive整合phoenix

背景:

业务表使用hbase存储,使用hive整合phoenix,使用sql语句进行数据查询

(如果可以的话使用网关API对外提供服务)统一接口调用,查询上线比较高效。

1、hive整合phoenix的原理

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

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

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

2、准备phoenix-hive连接器

在运行有Hive服务的所有集群节点,创建一个Hive可读的目录。例如:创建目录 /opt/hive/phoenix-hive ,复制 /opt/cloudera/parcels/PHOENIX/lib/phoenix/phoenix-5.0.0-cdh6.2.0-hive.jar 到该目录下。

3、配置Hive

编辑配置 Hive 辅助 JAR 目录 ,hive.aux.jars.path= /opt/hive/phoenix-hive

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

hive.aux.jars.path=/opt/hive/phoenix-hive

4、重启 Hive

5、建表

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

1)创建managed表

Hive完全管理表和数据。

drop table if exists adm.adm_exp_xxx_info_1d_full_daily;

create table adm.adm_exp_xxx_info_1d_full_daily (

row_key string,

c1 string,

c2 string,

c3 string,

c4 string,

c5 string,

c6 string,

c7 string

)

STORED BY ‘org.apache.phoenix.hive.PhoenixStorageHandler’ –插件,可以使用Apache Hive命令行访问Phoenix表。

TBLPROPERTIES (

“phoenix.table.name” = “Phoenix表名”, – Phoenix表名

“phoenix.zookeeper.quorum” = “ip1,ip2,ip3”, –指定HBase的ZooKeeper父节点

“phoenix.zookeeper.znode.parent” = “/hbase-unsecure”,

“phoenix.zookeeper.client.port” = “2181”, –指定ZooKeeper端口

“phoenix.rowkeys” = “row_key”,

“phoenix.column.mapping” = “row_key:row_key,c1:c1,c2:c2,c3:c3,c4:c4,c5:c5,c6:c6,c7:c7”,

“phoenix.table.options” = “SALT_BUCKETS=10, DATA_BLOCK_ENCODING=‘PREFIX_TREE’, COMPRESSION =‘SNAPPY’”,

“phoenix.upsert.batch.size” =“1000”);

2)创建external表

Hive只管理表的元数据。在创建external表之前,Phoenix表必须已经存在。

drop table if exists adm.adm_exp_xxx_info_1d_full_daily;

create external table adm.adm_exp_xxx_info_1d_full_daily (

row_key string,

c1 string,

c2 string,

c3 string,

c4 string,

c5 string,

c6 string,

c7 string

)

STORED BY ‘org.apache.phoenix.hive.PhoenixStorageHandler’ –插件,可以使用Apache Hive命令行访问Phoenix表。

TBLPROPERTIES (

“phoenix.table.name” = “Phoenix表名”, – Phoenix表名

“phoenix.zookeeper.quorum” = “ip1,ip2,ip3”, –指定HBase的ZooKeeper父节点

“phoenix.zookeeper.znode.parent” = “/hbase-unsecure”,

“phoenix.zookeeper.client.port” = “2181”, –指定ZooKeeper端口

“phoenix.rowkeys” = “row_key”,

“phoenix.column.mapping” = “row_key:row_key,c1:c1,c2:c2,c3:c3,c4:c4,c5:c5,c6:c6,c7:c7”,

“phoenix.table.options” = “SALT_BUCKETS=10, DATA_BLOCK_ENCODING=‘PREFIX_TREE’, COMPRESSION =‘SNAPPY’”,

“phoenix.upsert.batch.size” =“1000”);

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/78fe9f1713.html