美文网首页
Zeppelin Phoenix 与 Trino jdk 版本不

Zeppelin Phoenix 与 Trino jdk 版本不

作者: 六层楼那么高 | 来源:发表于2022-04-11 17:07 被阅读0次

1 问题

Zeppelin 部署 Trino 解释器,升级了 jdk 11,升级后 phoenix 解释器查询报错.
查看 Zeppelin phoenix interpreter 日志,显示 Unexpected version format: 11.0.12

image.png

2 问题分析

现象看是升级 jkd 11后带来的问题,异常栈显示 org.apache.hadoop.hbase.util.ClassSize 这个类在初始化的时候,提示当前 jdk 11.0.12 的版本号 Unexpected。
查看源码这个类所在的包为:hbase-common.jar,可能在两个地方引入:

  • $HBASE_HOME/lib 下
  • Zeppelin Phoenix 解释器 UI 上配置的依赖包: /data/cdh/phoenix-client.jar

通过反编译工具分别查看这两个 jar,发现里面都有一段 jdk 版本号的检查代码,只匹配 1.x.x 的版本号,不能匹配 11.x.x

 Verify String looks like this: 1.6.0_29
    if (!version.matches("\\d\\.\\d\\..*")) {
      throw new RuntimeException("Unexpected version format: " + version);
    }

后来查到这是一个 issue HBASE-17944,patch 内容是直接删除了这段校验代码。修复版本有:1.4.0, 1.2.6, 1.3.2, 1.1.11, 2.0.0

经过查询,Phoenix Client 直接把 hbase common 打进 jar 了,所以应该直接更新 Phoenix Client 这个包即可。

3 解决

无需重新编译源码,直接替换 phoenix-client.jar 中的 ClassSize.class:

  1. 依据 issue 建议,下载修复版本的 hbase-common.jar。 使用的版本是 1.1.11,因为当前 hbase 大版本是 1.x
  2. 解压下载的 jar : jar -xvf hbase-common-1.1.11.jar
  3. 删除 phoenix-client.jar 中的 ClassSize.class:zip -d phoenix-client.jar org/apache/hadoop/hbase/util/ClassSize.class
  4. 把修复的 class文件打入 jar:zip phoenix-client.jar org/apache/hadoop/hbase/util/ClassSize.class
  5. 重启 phoenix interpreter

4 Java 相关小技巧

Java jar class 反编译工具

  • 静态 class 文件,可以通过一个国外大神写的小工具反编译
    使用方法参考
    java -jar cfr-0.152.jar --extraclasspath hbase-common.jar org/apache/hadoop/hbase/util/ClassSize.class

  • 运行时加载的 class,可以通过 althas 反编译,教程参考 althas 文档

jar 中配置文件修改
可以直接 vim jar,通过 enter 选中问题件,直接 vim 编辑 jar 里面的文件

jar 如何解压
直接 jar -xvf xx.jar

jar 中更新(删除,新增)文件方法
1 先删除 zip -d xx.jar todeletefile1 todeletefile2
2 把新的文件打进去 zip xx.jar newfile1 newfile2

相关文章

网友评论

      本文标题:Zeppelin Phoenix 与 Trino jdk 版本不

      本文链接:https://www.haomeiwen.com/subject/ylxwsrtx.html