Phoenix4.6适配CDH5.4

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/d6619309/article/details/50358309

参考
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

repository从apache改为cloudera

  • 修改必要的依赖版本为cdh版本

依赖版本修改为cdh版本

依赖版本修改为cdh版本

2.2 修改源码

  • 修改LocalIndexMerger.java
package file line
phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver LocalIndexMerger.java 84

修改LocalIndexMerger.java

  • 修改IndexSplitTransaction.java
package file line
phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver IndexSplitTransaction.java 291

修改IndexSplitTransaction.java

2.3 mvn install

经过以上修改之后执行mvn clean install -DskipTests重新编译并生成发行包。编译成功后可以在phoenix-assembly的target目录下找到。

【注意】如果mvn install过程遇到module spark build fail,那么在pom.xml文件中将spark module给去掉再执行mvn install即可。

去掉spark module依赖

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成功,完成整合。

成功整合

展开阅读全文

没有更多推荐了,返回首页