CDH5.7.1下安装Phoenix4.14方案
1 安装环境
CDH版本:CDH5.7.1
服务器操作系统:CentOS 7.5
Phoenix版本:Phoenix4.14
2 下载Phoenix4.14包
下载地址:http://archive.apache.org/dist/phoenix/
图1 点击进入带有cdh字样的Phoenix包
图2 点击进入bin目录
图3 点击下载apache-phoenix-4.14包
3 配置Phoenix
3.1 上传至服务器
#在namenode节点上
#将apache-phoenix-4.14.0-cdh5.11.2-bin.tar.gz包上传至/opt目录下;
#tar xf apache-phoenix-4.14.0-cdh5.11.2-bin.tar.gz
# cd /opt/apache-phoenix-4.14.0-cdh5.11.2-bin
#复制jar包到指定目录
#cp phoenix-4.14.0-cdh5.11.2-server.jar phoenix-core-4.14.0-cdh5.11.2.jar phoenix-core-4.14.0-cdh5.11.2-sources.jar phoenix-core-4.14.0-cdh5.11.2-tests.jar /opt/cloudera/parcels/CDH-5.7.1-1.cdh5.7.1.p0.11/lib/hbase/lib/
#将文件权限改为777
#cd /opt/cloudera/parcels/CDH-5.7.1-1.cdh5.7.1.p0.11/lib/hbase/lib/
# chmod 777 phoenix-*
#复制jar包到指定目录(为啥要复制到两个目录下,不要问,问就不知道)
# cd /opt/apache-phoenix-4.14.0-cdh5.11.2-bin
#cp phoenix-4.14.0-cdh5.11.2-server.jar phoenix-core-4.14.0-cdh5.11.2.jar phoenix-core-4.14.0-cdh5.11.2-sources.jar phoenix-core-4.14.0-cdh5.11.2-tests.jar /opt/cloudera/parcels/CDH-5.7.1-1.cdh5.7.1.p0.11/lib/hbase
#cd /opt/cloudera/parcels/CDH-5.7.1-1.cdh5.7.1.p0.11/lib/hbase/
# chmod 777 phoenix-*
#在HBase Master节点和所有HBase RegionServer节点上均如此配置
3.2 修改配置
3.2.1 在CDH管理界面配置
hbase-site.xml 的 HBase 服务高级配置代码段(安全阀)
hbase-site.xml 的 HBase 客户端高级配置代码段(安全阀)
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>
<property>
<name>phoenix.schema.mapSystemTablesToNamespace</name>
<value>true</value>
</property>
<property>
<name>hbase.table.sanity.checks</name>
<value>false</value>
</property>
点击集群-->HBase-->配置里输入hbase-site.xml
图4 配置里搜索hbase-site.xml
图5 HBase 服务高级配置代码段
图6 HBase 客户端高级配置代码段
回到界面上,提示需要重新部署客户端配置和重启hbase,hue;
图7 重启配置生效
3.2.2 覆盖配置文件
#在namenode上配置
#备份原先的phoenix配置文件
#cd /opt/apache-phoenix-4.14.0-cdh5.11.2-bin/bin
#mkdir -pv bak
#cp -apr hbase-site.xml bak/
#将文件/etc/hbase/conf.cloudera.hbase/hbase-site.xml覆盖/opt/apache-phoenix-4.14.0-HBase-1.2-bin/bin/hbase-site.xml
# cp /etc/hbase/conf.cloudera.hbase/hbase-site.xml /opt/apache-phoenix-4.14.0-cdh5.11.2-bin/bin/hbase-site.xml
#其他节点均如此配置
4 测试
4.1 从phoenix写入数据
主要过程:在phoenix中创建schema和表,并向表中写数据,并在hbase中namespace查到对应表和数据;
4.1.1 创建schema和表
#cd /opt/apache-phoenix-4.14.0-cdh5.11.2-bin/bin
#连接zookeeper
#./sqlline.py zookeeper(指的是zookeeper地址)
图8 测试连接
#建立名为TEST的schema
0: jdbc:phoenix:NN01:2181> create schema test;
#建立名为TEST001的表
0: jdbc:phoenix:NN01:2181> CREATE table TEST.TEST001 ( ID VARCHAR PRIMARY
KEY, "cf"."field0" VARCHAR ) column_encoded_bytes=0;
#查询hbase,发现已创建对应schema和表
图9 列出hbase中namespace为TEST下的表
4.1.2 插入数据
#在phoenix中插入数据
0: jdbc:phoenix:NN01:2181> upsert into TEST.TEST001 (ID,"field0") values
('0001','ADADFASDFD');
图10 在phoenix中查看TEST001表中的数据
#可以看到hbase中存在对应数据;
图11 在hbase中查看TEST001表中的数据
4.2 从hbase写入数据
主要过程:在hbase中创建 namespace和表,并向表中写数据;
在phoenix中创建的schema和表,在phoenix中可以直接查到数据;
4.2.1 创建hbase表并插入数据
#hbase sehll
#创建namespace(如果没有,可以创建,后面例子是在已有的namespace中创建表)
>create_namespace "aaa"
#列出namespace
>list_namespace
#在已有且名为TEST的namespace中创建表;
hbase(main):092:0> hbase(main):110:0> create 'TEST:TEST002', {NAME
=>'CF',COMPRESSION => 'snappy'}
#手动插入数据
>put 'TEST:TEST002','1234356','CF:field0','dasdad'
#或利用ycsb插入数据(实验中为此操作)
ycsb load hbase10 -p table=TEST:TEST002 -p columnfamily=CF -P
./workloads/workloada -p fieldcount=1 -p fieldlength=40 -p recordcount=100 -p
clientbuffering=true -threads 8 -s
图12 向TEST002表中插入的数据
4.2.2 创建phoenix映射表
#在在phoenix创建映射表并查询数据
0: jdbc:phoenix:NN01:2181> CREATE TABLE TEST.TEST002 ( ID VARCHAR PRIMARY KEY, CF."field0" VARCHAR) column_encoded_bytes=0;
图13 在phoenix创建映射表和查询数据
4.3 注意事项
a) Phoenix 对表名和列名都是区分大小写的,但是,如果不加双引号,则默认为大写。
b) 表名要和 HBase 中建立的表名一致。HBase 默认的主列名是 ROW,所以要
将“ROW”设置为主键。列簇和列名也要用双引号括起来,要不然小写会自动变成大写。
特别注意:如果你使用的是 Phoenix 4.10 及以上的版本,可能会遇到查不出数据的情况:
那么如何解决这个问题呢?
在使用 Phoenix 创建表的时候,需要设置 COLUMN_ENCODED_BYTES 属性为 0,即不 让 Phoenix 对 column family 进行编码。
举例:
create table TEST.USER(pk varchar primary
key,url.id varchar,url.url_id varchar,url.url_name varchar) column_encoded_bytes=0;
5 支持索引
5.1修改配置
在hbase-site.xml 的 HBase 服务高级配置代码段(安全阀)添加此段
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
图14 修改hbase-site.xml的配置
注意:此步为后续补充,完成第四步操作后,发现创建索引存在问题,故做补充;
可以在第一次修改hbase-site.xml配置时加入,避免hbase二次重启;
如果重启时发现RegionServer挂了,可适当调整此参数;
hbase.regionserver.global.memstore.lowerLimit
图15 可修改的参数
5.2创建索引
5.2.1 测试用表结构
在HBASE中
>create_namespace TEST
>create 'TEST:DAT_GX', { NAME =>'d', COMPRESSION => 'snappy',BLOCKCACHE => 'false'}
> desc "TEST:DAT_GX"
图 16 HBase中DAT_GX的表结构
>scan 'TEST:DAT_GX',LIMIT=>1
图 17 Hbase表中列族格式
在phoenix中
>CREATE TABLE TEST.DAT_GX ("ROW" VARCHAR PRIMARY KEY, "d"."c" VARCHAR,
"d"."d" VARCHAR,"d"."m" VARCHAR,"d"."s" VARCHAR,"d"."t" VARCHAR) column_encoded_bytes=0;
图18 映射后phoenix中DAT_GX的表结构
5.2.2单列索引测试
以列族中列d:s创建secondary index
>create index dat_s on DAT_GX ("d"."s");
>!tables
>select "ROW","d"."s" from DAT_GX where "d"."s" = '20181220173433000';
创建后,hbase中会多一个表dat_s,在phoenix中看不到,大体结构如下:
> desc 'TEST:DAT_S'
5.2.3多列索引测试
>create index dat_t on DAT_GX ("d"."s","d"."t")
>!tables
>select "ROW","d"."s" from DAT_GX where "d"."t"='LDYCCS1D5G0011299';
6. 创建视图
6.1在hbase中创建表
>create 'TEST:USER', 'INFO'
#手动插入数据
>put 'USER', 'bbbZZZ1004', 'INFO:NAME', 'WeiDong'
>scan "TEST:USER"
6.2在phoenix创建视图
>use TEST
>create view user(
pk varchar primary key,
info.name varchar,
info.age varchar,
info.home varchar
) as select * from user;
>!tables
>select * from user;
6.3查看视图能否实时更新
#在hbase中插入数据
>put 'TEST:USER', 'cccTTT1007', 'INFO:NAME', 'YongFa'
> scan "TEST:USER"
#看看Phoenix的视图能否实时更新,查看原先的user视图,发现数据已经实时更新过去了;
>use TEST;
>select * from user;