Spark中的一次ClassNotFoundException排除

前陣子,我把實驗室小集羣上的spark從2.0.0升級到了2.1.1,當時直接排除掉了一個hdfs-site.xml文件不一致的錯誤(估計這是2.0.0版本的一個BUG),而且跑了一下測試代碼,一切OK。

可是,今天當我又試着跑同樣一段簡單的代碼時,拋出了以下異常:

ERROR server.TransportRequestHandler: Error while invoking RpcHandler#receive() on RPC id 6540510158756886012
java.lang.ClassNotFoundException: org.apache.spark.scheduler.cluster.CoarseGrainedClusterMessages$RetrieveSparkProps$
    at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:62)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:67)
...

在網上搜了半天,幾乎一無所獲。有一些關於找不到類的異常的文章,但都不是我遇到的情況。後來,逐漸追蹤到Spark的文檔,發現Spark2.0.0中存在類“CoarseGrainedClusterMessages.RetrieveSparkProps”(見Spark2.0.0文檔),但Spark2.1.1中,該類改名了,變成“CoarseGrainedClusterMessages.RetrieveSparkAppConfig”了!(見Spark2.1.1文檔).

這樣看來,集羣某個地方還是在按照2.0.0版本的spark運轉,所以纔會找不到類。猛然想到,之前在HDFS上專門建了個目錄,將spark下jars目錄下的jar包都傳了上去,以方便spark on yarn的運行,但那些jar包還未更新,因此造成了版本的不一致產生了問題。於是立馬更新HDFS上的這些jar包,spark果然又能正常運轉了~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章