【问题标题】:Why does submitting a job fail with "NoSuchMethodError: scala.runtime.VolatileObjectRef.zero()Lscala/runtime/VolatileObjectRef;"?为什么提交作业失败并显示“NoSuchMethodError: scala.runtime.VolatileObjectRef.zero()Lscala/runtime/VolatileObjectRef;”?
【发布时间】:2016-11-05 22:45:09
【问题描述】:

我正在尝试提交 Spark 作业

它是这样开始的:

import javax.xml.parsers.{SAXParser, SAXParserFactory}

import org.apache.spark
import org.apache.spark.graphx.{Graph, Edge, VertexId}
import org.apache.spark.rdd.{PairRDDFunctions, RDD}
import org.apache.spark.storage.StorageLevel
import org.apache.spark.{SparkContext, SparkConf}
import scala.util.Try
import org.apache.log4j.{Level, Logger}


object MyApp {

  def main(args: Array[String]) {

    val sparkConf = new SparkConf().setAppName("MyApp")
    val sc = new SparkContext(sparkConf)

当我启动它时,我收到以下错误:

App > Exception in thread "main" java.lang.NoSuchMethodError: scala.runtime.VolatileObjectRef.zero()Lscala/runtime/VolatileObjectRef;
App > at MyApp$.main(MyApp.scala)
App > at MyApp.main(MyApp.scala)
App > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
App > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
App > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
App > at java.lang.reflect.Method.invoke(Method.java:606)
App > at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:328)
App > at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75)
App > at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

我做错了什么?

编辑:包括完整的堆栈跟踪。 使用 Scala 2.10 和 Spark 1.2.0。 奇怪的是,在我的罐子里,我有两个班级。当我触发提交一个时,它可以工作(这是一个 4 行的虚拟作业),但是当我运行较长的一个(大约 40 行)时,如果失败并出现上述错误

【问题讨论】:

  • 我不知道这个具体情况,但是对于其他类似的问题,这是一个Spark版本冲突。您是否更新了所有内容并重新编译了所有代码?
  • 您可以编辑您的问题以包含完整的堆栈跟踪吗?您使用的是哪个 Spark 版本以及如何提交作业(您使用的是spark-submit?)?
  • 您好,我编辑了我的问题。我正在使用 spark 1.2.0 和 scala 2.10。这是相同的服务器端。我尝试清理和重新编译,没有运气
  • 其实你一定是对的我认为是1.1.0的服务器端。我会仔细检查并确认。感谢这个亮点!代码的一部分是多么奇怪,而不是另一部分
  • 你找到有问题的图书馆了吗?

标签: scala apache-spark


【解决方案1】:

scala.runtime.VolatileObjectRef 上的zero() 已在 Scala 2.11 中引入 您可能有一个针对 Scala 2.11 编译并在 Scala 2.10 运行时上运行的库。

【讨论】:

  • 不就是这样吗?在 2.10 上编译并针对 2.11 运行,所以找不到零方法? (不确定)
  • 没有。 zero() 方法在 2.10 中不存在。因此,针对 2.10 编译的任何内容都不会知道它,并且在 2.11 上也不会出现问题。
【解决方案2】:

检查 Maven 依赖项的工件和版本。我使用时遇到了同样的错误

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>2.0.1</version>
</dependency>

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.0.1</version>
</dependency>

我不得不将 spark-core_2.10 更改为 spark-core_2.11 并且异常消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2012-01-20
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多