参考
phoenix适配cdh
1. 背景
在phoenix官网下载的phoenix-4.6.0-HBase-1.0/版本,无法适配cdh5.4的hbase(hbase版本为1.0.0),使用sqlline.py连接hbase时候会报类似以下错误:
Caused by
java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Scan.setRaw(Z)Lorg/apache/hadoop/hbase/client/Scan;
出错原因是phoenix官方版本pom文件里的hbase依赖并不是使用cdh版本的。所以,为了能够使得phoenix与cdh对应,我们需要从phoenix官网下载对应版本(4.6.0)的phoenix源码,修改pom文件依赖以及部分源码,并重新编译,得到适配于cdh5.4 hbase1.0.0 的phoenix。
【注意】 需要特别注意phoenix与cdh hbase的版本对应关系,这里选用的是phoenix-4.6.0-HBase-1.0
。
2. 解决步骤
2.1 修改pom.xml文件
对phoenix-4.6.0-HBase-1.0
源码中的pom.xml文件做如下修改:
- 将repository从apache改为cloudera
- 修改必要的依赖版本为cdh版本
2.2 修改源码
- 修改LocalIndexMerger.java
package | file | line |
---|---|---|
phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver | LocalIndexMerger.java | 84 |
- 修改IndexSplitTransaction.java
package | file | line |
---|---|---|
phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver | IndexSplitTransaction.java | 291 |
2.3 mvn install
经过以上修改之后执行mvn clean install -DskipTests重新编译并生成发行包。编译成功后可以在phoenix-assembly的target目录下找到。
【注意】如果mvn install过程遇到module spark build fail,那么在pom.xml文件中将spark module给去掉再执行mvn install即可。
2.4 替换相关jar
在apache phoenix官网下载对应phoenix版本的发行包,然后在我们自己编译得到的phoenix中找到以下jar,替换到下载的phoenix发行包中,并将替换后的发行包放到我们集群中的某个目录下。
example :
192.168.25.128
/root/cdh5.4/phoenix-4.6.0-HBase-1.0-wrapper-cdh5.4.2
- phoenix-4.6.0-HBase-1.0-client.jar
- phoenix-4.6.0-HBase-1.0-server-without-antlr.jar
- phoenix-4.6.0-HBase-1.0-client-minimal.jar
- phoenix-assembly-4.6.0-HBase-1.0-tests.jar
- phoenix-4.6.0-HBase-1.0-client-without-hbase.jar
- phoenix-core-4.6.0-HBase-1.0.jar phoenix-4.6.0-HBase-1.0-server.jar
2.5 配置RegionServer HBase lib path
将新编译出的 phoenix-4.6.0-HBase-1.0-server.jar放到每一个RegionServer节点的HBase的library path下。
eg:
192.168.25.128
/usr/lib/hbase/lib
2.6 重启HBase集群
最后为了使得配置生效,必须将cdh的hbase集群重启。重启后再次使用sqlline.py连接hbase成功,完成整合。