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

 

posted @ 2020-06-12 14:58  起飞的大象  阅读(495)  评论(0)    收藏  举报
/** * Copyright (c) 2016 hustcc * License: MIT * Version: v1.0.1 * GitHub: https://github.com/hustcc/canvas-nest.js **/ ! function() { function n(n, e, t) { return n.getAttribute(e) || t } function e(n) { return document.getElementsByTagName(n) } function t() { var t = e("script"), o = t.length, i = t[o - 1]; return { l: o, z: n(i, "zIndex", -1), o: n(i, "opacity", .5), c: n(i, "color", "0,0,0"), n: n(i, "count", 99) } } function o() { a = m.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, c = m.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight } function i() { r.clearRect(0, 0, a, c); var n, e, t, o, m, l; s.forEach(function(i, x) { for (i.x += i.xa, i.y += i.ya, i.xa *= i.x > a || i.x < 0 ? -1 : 1, i.ya *= i.y > c || i.y < 0 ? -1 : 1, r.fillRect(i.x - .5, i.y - .5, 1, 1), e = x + 1; e < u.length; e++) n = u[e], null !== n.x && null !== n.y && (o = i.x - n.x, m = i.y - n.y, l = o * o + m * m, l < n.max && (n === y && l >= n.max / 2 && (i.x -= .03 * o, i.y -= .03 * m), t = (n.max - l) / n.max, r.beginPath(), r.lineWidth = t / 2, r.strokeStyle = "rgba(" + d.c + "," + (t + .2) + ")", r.moveTo(i.x, i.y), r.lineTo(n.x, n.y), r.stroke())) }), x(i) } var a, c, u, m = document.createElement("canvas"), d = t(), l = "c_n" + d.l, r = m.getContext("2d"), x = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(n) { window.setTimeout(n, 1e3 / 45) }, w = Math.random, y = { x: null, y: null, max: 2e4 }; m.id = l, m.style.cssText = "position:fixed;top:0;left:0;z-index:" + d.z + ";opacity:" + d.o, e("body")[0].appendChild(m), o(), window.onresize = o, window.onmousemove = function(n) { n = n || window.event, y.x = n.clientX, y.y = n.clientY }, window.onmouseout = function() { y.x = null, y.y = null }; for (var s = [], f = 0; d.n > f; f++) { var h = w() * a, g = w() * c, v = 2 * w() - 1, p = 2 * w() - 1; s.push({ x: h, y: g, xa: v, ya: p, max: 6e3 }) } u = s.concat([y]), setTimeout(function() { i() }, 100) } ();