背景
由於華爲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中的順序。