为什么提交作业失败了“NoSuchMethodError:scala.runtime.VolatileObjectRef.zero()Lscala / runtime / VolatileObjectRef;”?

时间:2015-01-25 18:55:36

标签: scala apache-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行)时,如果失败并出现上述错误

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:1)

检查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,异常消失。