我正在努力使用将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