【问题标题】:spark submit throws an error java.lang.ClassNotFoundException: scala.runtime.java8.JFunction2$mcIII$spspark submit 抛出错误 java.lang.ClassNotFoundException: scala.runtime.java8.JFunction2$mcIII$sp
【发布时间】:2020-07-14 14:31:06
【问题描述】:

我编写了一个字数统计代码,但是当我尝试使用以下命令从 Windows 中的 CMD 运行它时,它会引发异常。

spark-submit --class com.sample.WordCount --master local file:///E:/WordCountSample/target/WordCountSample-0.0.1-SNAPSHOT.jar file:///C:/Users/siddh/OneDrive/Desktop/sample.txt

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>SparkSampleInScala</groupId>
    <artifactId>WordCountSample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>WordCountSample</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!--<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M1</version> 
        </plugin> </plugins> </build> -->
    <dependencies>

        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>2.4.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.scala-lang/scala-library -->
<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.12.8</version>
</dependency>


    </dependencies>
</project>  

但是当我运行 spark submit 时,它会抛出以下错误:

Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction2$mcIII$sp
        at com.sample.WordCount$.main(WordCount.scala:22)
        at com.sample.WordCount.main(WordCount.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.JavaMainApplication.start(SparkApplication.scala:52)
        at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:849)
        at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
        at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
        at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
        at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction2$mcIII$sp
        ... 14 more
Caused by: java.lang.ClassNotFoundException: scala.runtime.java8.JFunction2$mcIII$sp

那么在这种情况下需要做些什么呢?我正在使用spark 2.4.0 版本和scala 2.12.8 version,它们已经安装在我的Windows 上。 请帮助我,因为几天以来我一直陷入困境。 在此先感谢:)

【问题讨论】:

  • 我只在 Linux 上运行过。不是 Windows。
  • 在 Linux 中也抛出同样的错误
  • 你能在你的构建中使用 sbt 吗?如果是,则 sbt 程序集插件将处理所有依赖项以放入 fat jar。
  • 我使用 maven 作为构建工具,这就是我发布 pom.xml 代码的原因
  • 正在使用 Intellij?

标签: java scala apache-spark hadoop


【解决方案1】:

看起来您正在使用 2.4.x 和 Scala 2.12。可能是兼容性问题。 Spark 文档参考:- Spark 在 Java 8+、Python 2.7+/3.4+ 和 R 3.1+ 上运行。对于 Scala API,Spark 2.4.0 使用 Scala 2.11。您需要使用兼容的 Scala 版本 (2.11.x)。

【讨论】:

  • 好的,试试看告诉你
  • 非常感谢。在我将 scala 版本从 2.12.* 更改为 2.11.* 后,它对我有用。
【解决方案2】:

我遇到了同样的问题,并通过更改我在开发过程中使用的 Scala 版本以匹配 Spark 附带的版本来解决它。

当我使用 ./spark-shell 启动 Spark 时,它会显示 Using Scala version 2.11.12, 因此,我将 build.sbt 中的 Scala 版本从 2.12.8 更改为 2.11.12,一切正常。 我用的是 Spark 版本2.4.3

【讨论】:

    【解决方案3】:

    其他答案都是正确的。

    要添加它们,请不要忘记在更改 Scala 版本时更新 spark-submit 命令中的 jar 路径。所以如果你使用 sbt 它是:

    1. 更新 Scala 版本以与 Spark 兼容。
    2. sbt package
    3. 在 spark-submit 命令中更新 jar 路径。就我而言,它从target/scala-2.12/word-count-app_2.12-1.0.jar 变为target/scala-2.11/word-count-app_2.11-1.0.jar

    【讨论】:

    • 感谢您的回复。我使用的是 maven,这已经很久了:P
    猜你喜欢
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2017-08-30
    • 2014-11-17
    • 1970-01-01
    相关资源
    最近更新 更多