Spark ClassNotFoundException与最简单的rdd.map

时间:2018-04-18 15:16:49

标签: apache-spark classnotfoundexception

修改 此问题与Resolving dependency problems in Apache Spark

不重复
  • 上面的答案是关于共享代码的一般性。我不知道它如何适用于我的问题
  • 这里我不使用spark-submit,只是简单地从计算机上运行的应用程序调用spark
  • 没有任何依赖。要分享的唯一代码是简单函数i => i
  • 如果是spark / java / scala版本的问题,我不明白为什么它会为有问题的函数产生ClassNotFoundException

我运行此代码

object Tmp {

  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf()
      .setAppName("Spark Test")
      .setMaster("spark://[ip-of-spark-master]:7077")
    val sc = new SparkContext(sparkConf)

    sc.parallelize(0 until 10000).map(i => i).count()
  }
}

当我在计算机上运行它而没有发送任何jar时,java.lang.ClassNotFoundException: Tmp$$anonfun$main$1失败了。如果我不执行map(i => i)(即,找不到函数i => i),它就可以工作。

要明确:

  • 我不使用spark-submit
  • 我的电脑是驱动程序,不在火花集群上
  • 我在群集中使用的计算机上使用完全相同的spark版本(2.0.2)

现在我认为,对于简单的功能,spark会序列化它,并且不需要发送jar。我很确定我以前做过。

我错过了什么吗?

查看堆栈跟踪,它在驱动程序上失败,所以在我身边:

Driver stacktrace:
[error]     at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1454)
[error]     at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1442)
[error]     at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1441)

...

[error] Caused by: java.lang.ClassNotFoundException: Tmp$$anonfun$1
[error]     at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[error]     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[error]     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[error]     at java.lang.Class.forName0(Native Method)
[error]     at java.lang.Class.forName(Class.java:348)
[error]     at org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:67)
...

0 个答案:

没有答案