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”);

你可能感兴趣的:(hbase,hive,hive,hbase)