简介
Phoenix最早是saleforce的一个开源项目,后来成为Apache基金的顶级项目
Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表、插入数据和对HBase数据进行查询
因此Phoenix跟HBase是离不开的,Phoenix的安装也是基于HBase的。在安装Phoenix之前,请确保集群上已经安装了Hadoop集群跟HBase集群。
注意:Cloudera官方并不支持Phoenix,也就是说从Phoenix官网下的预编译的包在CDH安装的HBase上根本不能运行,Phoenix官网对此也没有任何说明!!!
1.编译源码
如果从Phoenix官网下载4.6.0的源码来编译,需要自己修改pom.xml文件,比较麻烦。Github下载chiastic-security修改过pom.xml文件的源码上传了,链接如下:
https://github.com/chiastic-security/phoenix-for-cloudera/tree/4.6-HBase-1.0-cdh5.5
直接下载ZIP包
1.1下载该链接的源码,用maven进行编译
- 进入
phoenix-for-cloudera-4.6-HBase-1.0-cdh5.5
目录 - $
mvn package -DskipTests
在编译的过程中,可能会报错,不要放弃,多次使用命令mvn package -DskipTests编译,我就编译了N次才成功
1.2如果自己不想下载源码编译,我把我编译过的放在百度网盘里,自行下载。
https://pan.baidu.com/s/1M-gGpV7r4BVgNj3E-MOxmQ 提取码:o3vr
2.将相关jar拷贝到HBase的lib目录下
将相关jar包拷贝到复制到Hadoop集群,HBase的lib目录下
cp phoenix-4.6.0-cdh5.5.1-server.jar /usr/lib/hbase/lib
$ scp phoenix-4.6.0-cdh5.5.1-server.jar cdh2:/usr/lib/hbase/lib/phoenix-4.6.0-cdh5.5.1-server.jar
$ scp phoenix-4.6.0-cdh5.5.1-server.jar cdh3:/usr/lib/hbase/lib/phoenix-4.6.0-cdh5.5.1-server.jar
3.配置Phoenix客户端的CLASSPATH
将phoenix-4.6.0-cdh5.5.1-client.jar添加到Phoenix客户端的CLASSPATH中,这里是cdh2节点
在/etc/profile.d目录下新建phoenix.sh
export CLASSPATH=.:/opt/phoenix/phoenix-4.6.0-cdh5.5.1-client.jar
$ source phoenix.sh
4.配置hbase-site.xml
<!--phoenix Master-->
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
<property>
<name>hbase.master.loadbalancer.class</name>
<value>org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value>
</property>
<property>
<name>hbase.rpc.timeout</name>
<value>300000</value>
</property>
<!--phoenix Region Server-->
<property>
<name>hbase.region.server.rpc.scheduler.factory.class</name>
<value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value>
</property>
<property>
<name>hbase.coprocessor.regionserver.classes</name>
<value>org.apache.hadoop.hbase.regionserver.LocalIndexMerger</value>
</property>
<property>
<name>hbase.rpc.timeout</name>
<value>300000</value>
</property>
将Hbase-site.xml 同步到Hadoop集群其它服务器
5.复制Hadoop相关配置文件到sqlline.py同级目录 (重要)
切换到与Sqlline.py同级目录
cp /etc/hadoop/conf/hdfs-site.xml .
cp /etc/hadoop/conf/core-site.xml .
cp /etc/hbase/conf/hbase-site.xml .
6.验证是否可用
如果hadoop集群,配置有kerberos,需要获取hbase的凭据
每次执行sqlline.py脚本时,最好用kinit命令重新获取下凭据,使用历史没过期的凭据可能会报错(重点)
./sqlline.py cdh2:2181:/hbase
sqlline version 1.1.8
0: jdbc:phoenix:cdh1:2181:/hbase> !table
+------------------------------------------+------------------------------------------+----------------------------------+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME |
+------------------------------------------+------------------------------------------+----------------------------------+
| | SYSTEM | CATALOG |
| | SYSTEM | FUNCTION |
| | SYSTEM | SEQUENCE |
| | SYSTEM | STATS |
| | | test1 |
+------------------------------------------+------------------------------------------+----------------------------------+
以上配置成功。