CDH安装phoenix
1.背景
base 提供很方便的shell脚本以及java API等方式对Hbase进行操作,但是对于很对已经习惯了关系型数据库操作的开发来说,有一定的学习成本,如果可以像操作mysql等一样通过sql实现对Hbase的操作,那么很大程度降低了Hbase的使用成本。Apache Phoenix 组件就完成了这种需求,官方注解为 “Phoenix -we put the SQL back in NoSql”,通过官方说明,Phoenix 的性能很高,相对于 hbase 原生的scan 并不会差多少,而对于类似的组件 hive、Impala等,性能有着显著的提升
2.安装
1.集群环境
CDH版本是5.16.1,在阿里云上的三台集群.Hbase也是部署了3台机器.三台机器的配置都是2核8G
2.安装的parcel文件下载
从官网选择CDH相近的版本下载:http://www.apache.org/dist/phoenix/,我的CDH是5.16.1的,所以只能选
APACHE_PHOENIX-4.14.0-cdh5.14.2这个版本.
wget http://www.apache.org/dist/phoenix/apache-phoenix-4.14.0-cdh5.14.2/parcels/APACHE_PHOENIX-4.14.0-cdh5.14.2.p0.3-el7.parcel
wget http://www.apache.org/dist/phoenix/apache-phoenix-4.14.0-cdh5.14.2/parcels/manifest.json
wget http://www.apache.org/dist/phoenix/apache-phoenix-4.14.0-cdh5.14.2/parcels/APACHE_PHOENIX-4.14.0-cdh5.14.2.p0.3-el7.parcel.sha512
3.将parcel文件的hash值写入sha文件
[root@hadoop001 parcel-repo] sha1sum APACHE_PHOENIX-4.14.0-cdh5.14.2.p0.3-el7.parcel
5aebefdeb239a9dc7a042b891e2aac98336a25bc APACHE_PHOENIX-4.14.0-cdh5.14.2.p0.3-el7.parcel
[root@hadoop001 parcel-repo] vim APACHE_PHOENIX-4.14.0-cdh5.14.2.p0.3-el7.parcel.sha
4.CDH分配并激活Phoenix
5.phoenix-4.14.0-cdh5.12.2-server.jar复制
将phoenix-4.14.0-cdh5.12.2-server.jar这个jar包复制到其余三台机器的hbase/lib路径下
cp /opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-4.14.0-cdh5.14.2-server.jar /opt/cloudera/parcels/CDH/lib/hbase/lib/
scp /opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-4.14.0-cdh5.14.2-server.jar hadoop002:/opt/cloudera/parcels/CDH/lib/hbase/lib/
scp /opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/phoenix-4.14.0-cdh5.14.2-server.jar hadoop003:/opt/cloudera/parcels/CDH/lib/hbase/lib/
6.启动
启动之前需要重启一下Hbase服务,直接在CDH界面操作
[root@hadoop001 bin] pwd
/opt/cloudera/parcels/APACHE_PHOENIX/lib/phoenix/bin
[root@hadoop001 bin] ./sqlline.py
使用,基本上是sql的使用
1.建表
CREATE TABLE IF NOT EXISTS dept (
deptno Integer,
dname varchar(14),
loc varchar(13)
CONSTRAINT dept_pk PRIMARY KEY (deptno));
2.插入数据
upsert into dept values (10, 'ACCOUNTING', 'NEW YORK');
upsert into dept values (20, 'RESEARCH', 'DALLAS');
upsert into dept values (30, 'SALES', 'CHICAGO');
upsert into dept values (40, 'OPERATIONS', 'BOSTON');
3.查询数据
select * from dept;
0: jdbc:phoenix:> select * from dept;
+---------+-------------+-----------+
| DEPTNO | DNAME | LOC |
+---------+-------------+-----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
+---------+-------------+-----------+
4 rows selected (0.233 seconds)
3.Phoenix使用注意点(坑)
1.数据类型的转换
转换比较多,这边仅列出部分
mysql | phoenix |
---|---|
char/varchar | varchar |
可能会出现mysql的varchar的长度为10,但是phoenix的varchar也为10的时候会插不进去,一般phoenix的长度会设置成mysql的2倍 | |
int | integer |
datetime/timestamp | timestamp |
2.时区
phoenix的a.timezone时区可能会出现不对应(读和写),时区的修改可以通过修改源代码来修复
3.数据重复
有时候根据ID查询一条数据的时候,结果会出现两条一模一样的记录