一个 HBase 无法写入的奇怪问题

问题现象

本地环境测试可以正常写入 HBase,但是打包部署到测试环境上之后,HBase 就写入失败了,并且报错 java.lang.reflect.invocationtargetexception

问题分析

将测试环境的 yml 拿到本地,Debug 模式启动应用,发现可以写入 HBase。

这就很奇怪了,完全想不通,一点也没有头绪。

本着死马当活马医,将测试和本地的日志进行对比,当我对比到快结束的时候:
JDK

发现两者的 JDK 版本不一致,测试环境的是 JDK 11,而本地的是 JDK 8,觉得可能是这个原因。

下面进行验证,点击 Application 右边的下拉,选择「Edit Configuration」:
Edit Configuration

将运行时 JDK 版本修改为 java 11,点击「OK」进行保存:
运行时 JDK

重新进行测试,果然报了一样的错误。

问题原因

测试环境的 JDK 与本地环境的 JDK 不一致,后面深入分析了下是因为 JDK 8 与 JDK 11 的反射机制存在差异,导致报错 java.lang.reflect.invocationtargetexception

解决方法

将本地的 JDK 8 文件夹拷贝的服务器,使用命令 "D:\Program Files\jdk-8\bin\java.exe" -jar analysis-1.1.0.jar 启动应用。

posted @ 2022-04-30 20:57  ageovb  阅读(225)  评论(0编辑  收藏  举报