CDH对Phoenix的安装支持并没有像其他Hadoop组件如HBase、Impala那些可以直接从CDH Manager进行一键式安装,CDH 实验室提供一个CLAS_PHOENIX的parcel包,确实是可以通过CDH Manager中安装parcel的方法来安装,如http://phoenix.trenddevs.co.uk/parcels/4.13.1-cdh5.11.2/,可以提供客户正式使用,支持的Phoenix版本也比较新(支持CDH版本至少5.7)。
本文使用的CDH版本为CDH5.4,由于并没有从网上找到合适的parcel版本可以直接从CDH Manager安装,因此选择直接通过编译对应的源码安装。Phoenix-for-cloudera一个github的源码地址:git clone https://github.com/chiastic-security/phoenix-for-cloudera.git 可以下载支持不同版本CDH的Phoenix。
源码下载及编译命令如下,
git clone https://github.com/chiastic-security/phoenix-for-cloudera.git
git branch -a
git checkout remotes/origin/4.6-HBase-1.0-cdh5.4
cd phoenix-for-cloudera/
mvn clean package -DskipTests -Dcdh.flume.version=1.6.0
上述编译结束后,会在phoenix-for-cloudera/phoenix-assembly/target生成相应的phoenix包,下面我们需要做的是,
1 把phoenix-4.6.0-cdh5.4.5-server.jar复制到CDH集群中每个RegionServer的hbase lib目录下,这里的目录为opt/cloudera/parcels/CDH/lib/hbase/lib
2 重启HBase
3 将phoenix-4.6.0-cdh5.4.5-all.tar.gz解压并把文件夹复制到集群中的某一台机器上,通过sqlline.py客户端工具连接Phoenix,cd phoenix-4.6.0-cdh5.4.5/bin,./sqlline.py zk:2181
如果配置无误,输出如下,
[root@esg08 bin]# ./sqlline.py esg08:2181
Setting property: [isolation, TRANSACTION_READ_COMMITTED]
issuing: !connect jdbc:phoenix:esg08:2181 none none org.apache.phoenix.jdbc.PhoenixDriver
Connecting to jdbc:phoenix:esg08:2181
17/12/19 14:02:41 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Connected to: Phoenix (version 4.6)
Driver: PhoenixEmbeddedDriver (version 4.6)
Autocommit status: true
Transaction isolation: TRANSACTION_READ_COMMITTED
Building list of tables and columns for tab-completion (set fastconnect to true to skip)...
85/85 (100%) Done
Done
sqlline version 1.1.8
0: jdbc:phoenix:esg08:2181>
0: jdbc:phoenix:esg08:2181> !tables
+------------------------------------------+------------------------------------------+------------------------------------------+------------------------------------------+--------------------+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | RE |
+------------------------------------------+------------------------------------------+------------------------------------------+------------------------------------------+--------------------+
| | SYSTEM | CATALOG | SYSTEM TABLE | |
| | SYSTEM | FUNCTION | SYSTEM TABLE | |
| | SYSTEM | SEQUENCE | SYSTEM TABLE | |
| | SYSTEM | STATS | SYSTEM TABLE | |
+------------------------------------------+------------------------------------------+------------------------------------------+------------------------------------------+--------------------+
下面我们可以在此交互式客户端中试用简单的SQL语句了,
0: jdbc:phoenix:esg08:2181> create table t1(a integer primary key, b varchar(10));
No rows affected (0.631 seconds)
0: jdbc:phoenix:esg08:2181> upsert into t1 values(1,'ABC');
1 row affected (0.199 seconds)
0: jdbc:phoenix:esg08:2181> select * from t1;
+------------------------------------------+------------+
| A | B |
+------------------------------------------+------------+
| 1 | ABC |
+------------------------------------------+------------+
1 row selected (0.083 seconds)
0: jdbc:phoenix:esg08:2181> explain select * from t1;
+------------------------------------------+
| PLAN |
+------------------------------------------+
| CLIENT 1-CHUNK PARALLEL 1-WAY FULL SCAN OVER T1 |
+------------------------------------------+
1 row selected (0.028 seconds)
0: jdbc:phoenix:esg08:2181> !exit
Closing: org.apache.phoenix.jdbc.PhoenixConnection
我们也可以通过客户端工具连接Phoenix,通过界面化的方式执行SQL语句,由于Phoenix支持标准的JDBC,因此大多数支持JDBC工具的客户端工具如SQuirreL可以通过配置连接到Phoenix,这可以参考我的另外一篇博文:http://blog.csdn.net/post_yuan/article/details/78854862