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

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:
- 依据 issue 建议,下载修复版本的 hbase-common.jar。 使用的版本是 1.1.11,因为当前 hbase 大版本是 1.x
- 解压下载的 jar : jar -xvf hbase-common-1.1.11.jar
- 删除 phoenix-client.jar 中的 ClassSize.class:zip -d phoenix-client.jar org/apache/hadoop/hbase/util/ClassSize.class
- 把修复的 class文件打入 jar:zip phoenix-client.jar org/apache/hadoop/hbase/util/ClassSize.class
- 重启 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
网友评论