背景
由于华为fushioninsight平台升级了版本(spark、hadoop版本大跃进),导致我司的大数据平台对接失败,最近,根据华为客户端的jar包,重新编译大数据平台代码,在重新对接过程中,出现了一些jar包导致的问题,本文就记录一个解决ClassNotFoundException/NoClassDefFoundError异常的过程。异常信息如下:
解决过程
- 在lib下使用grep -R -i “xxxxx” .命令,查找该类是否存在某个jar包中,结果显示存在。
- 查看该类加载自哪个jar包,笔者现在的有两种方法去查看
a) 使用arthas工具sc命令;
b) java启动命令中添加-verbose:class参数
由于平台设计原因,jetty进程启动过程中,如果发生异常,平台会自动把jetty进程杀掉,所以没法使用arthas工具去定位,所以本次异常定位使用b方式去查看该class加载自那个jar。
最终发现该class加载的jar不对,于是调整了这两个jar包在在spark --jars中的顺序。