天天看點

spark-submit 報 NoClassDefFoundError 解決

報錯資訊

在使用 spark-submit 送出 scala App 的時候,報出了一下異常,而 代碼就簡單的調用了一下 map() 方法:

Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction1$mcII$sp
    at com.henvealf.spark.learn.mapPartitonsTest$.main(mapPartitonsTest.scala:33)
    at com.henvealf.spark.learn.mapPartitonsTest.main(mapPartitonsTest.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:736)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction1$mcII$sp
    ... 11 more
Caused by: java.lang.ClassNotFoundException: scala.runtime.java8.JFunction1$mcII$sp
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 11 more
           

問題分析

很明顯是 Scala 中的某個類沒找到。

然而我在 spark-shell 裡面使用 map() 的時候并沒有什麼問題。于是乎就設想 spark-shell 用的 Scala 與我系統上安裝的 Scala 版本不一樣。

我的Scala 版本為 2.12.8, 

然後就去 $SPARK_HOME/jars 下看了看,發現下面幾個 jar 包:

spark-submit 報 NoClassDefFoundError 解決

而我編譯程式的時候使用的是 2.12.8,就設想是版本不一緻。

解決

将系統安裝的 Scala 與編譯時候用的 Scala 版本換成 Scala-2.11.8。

TIP :想知道目前 Spark 所對應的 Scala 版本,去 $SPARK_HOME/jars 下檢視就可以。

繼續閱讀