CDH6.2.0集成phoenix5.0.0及视图映射配置问题解决
安装环境
1.CM和CDH版本为6.2.0
2.Phoenix5.0.0
3.Hbase2.1.0
4.操作系统 CentOS Redhat7.5
5.集群已启用Kerberos
6.Hbase开启ACLs授权
版本说明
截至文档编写日期,目前Cloudera官网针对phoenix所提供的包

CDH5.16.2支持phoenix4.14.1
CDH6.2.0支持5.0.0
因此,在安装CDH的时候,一定要跟自己需求看完所要使用组件的parcel支持情况,来选择合适的稳定版本。
文件准备
csd文件
https://archive.cloudera.com/phoenix/6.2.0/csd/PHOENIX-1.0.jar
parcles文件
https://archive.cloudera.com/phoenix/6.2.0/parcels/PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel
https://archive.cloudera.com/phoenix/6.2.0/parcels/PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel.sha
https://archive.cloudera.com/phoenix/6.2.0/parcels/manifest.json
配置安装
将parcel文件放入自定义源(apache目录/var/www/html/phoenix)
将csd文件放入CM所在主机的/opt/cloudera/csd/目录
重启cloudera-scm-server
systemctl restart cloudera-scm-server
重启cm后在安装服务列表就会出现phoenix服务,在没有添加csd文件之前是没有phoenix服务的


接下来点击主机->parcel->配置,配置我们设置的自定义源,将parcel下载、分配、激活,选择服务安装节点,至此phoenix安装完毕。
说明:CDH5中是没有添加服务的,也就是没有csd文件;直接配置parcel步骤即可。
服务配置
打开hbase服务,选择配置,搜索hbase-site

这两项服务是系统自己添加的
这里我们需要配置Phoenix映射已存在HBase表

<property> <name>phoenix.schema.isNamespaceMappingEnabled</name> <value>true</value> </property> <property> <name>phoenix.schema.mapSystemTablesToNamespace</name> <value>true</value> </property>
官网解释:
phoenix.schema.isNamespaceMappingEnabled
如果启用,则使用schema创建的表将映射到名称空间,这需要在客户端和服务器上都设置。如果设置一次,则不应回滚。启用此属性后,旧客户端将无法工作。Default fase
phoenix.schema.mapSystemTablesToNamespace
当phoenix.connection.isNamespaceMappingEnabled也设置为true时,启用此属性将生效。如果启用,则SYSTEM表(如果存在)将自动迁移到SYSTEM名称空间。并且如果设置为false,那么系统表将仅在默认名称空间中创建。这需要同时在客户端和服务器上进行设置。default true
所以此配置需要在客户端配置同样添加


如果客户端配置没有添加则会报错:
Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server.
另外在我的环境中phoenix命令行还有一个报错:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
通过手动导入环境变量解决:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
更好的方式,或者问题的根本原因还在研究。
测试使用
在实际的测试过程中,使用table映射已存在的Hbase表,查询不到数据。
经过阅读官方文档发现,在phoenix4.10版本之前,使用table映射是没有问题的
在phoenix 4.10 版本后,对列映射做了优化,采用一套新的机制,不在基于列名方式映射到 hbase。
Hbase shell中创建表并插入数据
create 'PHOENIX_TEST','info'
put 'PHOENIX_TEST','row001','info:name','zhangsan'
put 'PHOENIX_TEST','row002','info:name','lisi'
put 'PHOENIX_TEST','row001','info:age','15'
put 'PHOENIX_TEST','row002','info:age','20'
解决方式:
1. 如果只做查询,强烈建议使用 phoenix 视图方式映射,删除视图不影响 hbase 源数据,语法如下:
create view PHOENIX_TEST(pk VARCHAR PRIMARY KEY,"info"."name" VARCHAR,"info"."age" VARCHAR);
说明:若使用小写,由于phoenix机制问题,一定要加双引号包裹。
强烈推荐此种方式。在实际测试过程中,创建同名映射表虽然没有数据,但是删除后,hbase中的表也跟着删除了。
2. 必须要表映射,需要禁用列映射规则(会降低查询性能),如下:
create view PHOENIX_TEST(pk VARCHAR PRIMARY KEY,"info"."name" VARCHAR,"info"."age" VARCHAR) column_encoded_bytes=0;
jarvan
2020-06-12

浙公网安备 33010602011771号