Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 当通过Spark submit将JAR提交给Spark时,ClassNotFoundException_Apache Spark_Intellij Idea_Jar_Classnotfoundexception_Spark Submit - Fatal编程技术网

Apache spark 当通过Spark submit将JAR提交给Spark时,ClassNotFoundException

Apache spark 当通过Spark submit将JAR提交给Spark时,ClassNotFoundException,apache-spark,intellij-idea,jar,classnotfoundexception,spark-submit,Apache Spark,Intellij Idea,Jar,Classnotfoundexception,Spark Submit,我正在努力使用Spark submit向apachespark提交JAR 为了让事情变得更简单,我尝试了使用这个。代码是 import org.apache.spark.SparkContext import org.apache.spark.SparkConf object SimpleScalaSpark { def main(args: Array[String]) { val logFile = "/Users/toddmcgrath/Development/spark-

我正在努力使用
Spark submit
向apachespark提交JAR

为了让事情变得更简单,我尝试了使用这个。代码是

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
,如下所示

./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中按预期运行。

根据您上面的描述 ,您没有提供正确的类名,因此无法找到该类

只需将SimpleSparkScala替换为SimpleSparkScala

尝试运行以下命令:


/spark submit--class simplescalarispark--master local[*]~/Documents/spark/Scala/supersimple/out/artifacts/supersimple\u jar/supersimple.jar

IDE在许多方面与shell的工作方式不同。 我认为对于shell,您需要添加--jars参数


您的jar似乎有问题。您可以使用以下命令检查jar中存在哪些类: vi supersimple.jar


如果SimpleScalpark类未出现在上一个命令的输出中,则表示您的jar未正确构建。

我正在观察我介绍的新类中未找到的类。我用的是一个肥罐子。我验证了JAR文件在每个节点的所有副本中都包含新的类文件。(我使用常规文件系统加载Spark应用程序,而不是hdfs或http URL)。 工人加载的JAR文件没有我引入的新类。这是一个旧版本。
我发现解决这个问题的唯一方法是每次调用spark submit脚本时都为JAR使用不同的文件名。

Yes.抱歉。我也发现了这一点,并更新了问题,但实际上这不是问题所在。我现在认为这与Intellij构建罐子的方式有关。如果我使用“来自具有依赖项的模块…”选项(例如),它会失败,如上所述。但是,如果我手动设置JAR设置,它就会工作。我不确定为什么“快速安装”不起作用。如果在本地安装上运行spark,则应向spark依赖项添加%'provided',然后添加sbt clean和sbt assembly。我无法确定旧版本的来源。