我正在努力使用將JAR提交給Apache Spark。當通過spark-submit將JAR提交給Spark時發生ClassNotFoundException
爲了使事情更容易,我試驗過使用此blog post。代碼是
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
object SimpleScalaSpark {
def main(args: Array[String]) {
val logFile = "/Users/toddmcgrath/Development/spark-1.6.1-bin-hadoop2.4/README.md" // I've replaced this with the path to an existing file
val conf = new SparkConf().setAppName("Simple Application").setMaster("local[*]")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}
}
我正在使用Intellij Idea 2017.1構建此版本,並運行在Spark 2.1.0上。當我在IDE中運行它時,一切運行良好。
然後我把它做成一個JAR並嘗試使用如下
./spark-submit --class SimpleScalaSpark --master local[*] ~/Documents/Spark/Scala/supersimple/out/artifacts/supersimple_jar/supersimple.jar
這將導致以下錯誤
java.lang.ClassNotFoundException: SimpleScalaSpark
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
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.util.Utils$.classForName(Utils.scala:229)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:695)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我在茫然,我是什麼缺少......特別是它在IDE中按預期運行。
Yes.Sorry。我也發現了這個問題,並更新了這個問題,但這不是問題。我現在認爲這與Intellij構建JAR的方式有關。如果我使用「From modules with dependencies ...」選項(例如http://stackoverflow.com/questions/1082580/how-to-build-jars-from-intellij-properly),它將失敗,如上所述。但是,如果我手動設置JAR設置,它將起作用。我不確定爲什麼「快速設置」不起作用。 – dommer
如果你在本地安裝運行spark,你應該添加%'提供的「來激發依賴關係,然後清理sbt程序集。 – fpopic