【问题标题】:Standalone spark cluster. Can't submit job programmatically -> java.io.InvalidClassException独立火花簇。无法以编程方式提交作业-> java.io.InvalidClassException
【发布时间】:2014-10-30 05:27:51
【问题描述】:

Spark 小伙伴们,我对 Spark 还很陌生,所以我确实希望能得到你们的帮助。

我正在尝试从我的笔记本电脑上安排 Spark 集群上非常简单的工作。尽管它有效,但当我使用./spark-submit 提交它时,当我尝试以编程方式执行它时,它会引发异常。

环境: - Spark - 1 个主节点和 2 个工作节点(独立模式)。 Spark 未编译,但已下载二进制文件。星火版本 - 1.0.2 - java版本“1.7.0_45” - 应用程序 jar 无处不在(在同一位置的客户端和工作节点上); - README.md 文件也被复制到每个节点;

我正在尝试运行的应用程序:

val logFile = "/user/vagrant/README.md"

val conf = new SparkConf()
conf.setMaster("spark://192.168.33.50:7077")
conf.setAppName("Simple App")
conf.setJars(List("file:///user/vagrant/spark-1.0.2-bin-hadoop1/bin/hello-apache-spark_2.10-1.0.0-SNAPSHOT.jar"))
conf.setSparkHome("/user/vagrant/spark-1.0.2-bin-hadoop1")

val sc = new SparkContext(conf)

val logData = sc.textFile(logFile, 2).cache()

...

所以问题是,这个应用程序在集群上成功运行,当我这样做时:

./spark-submit --class com.paycasso.SimpleApp --master spark://192.168.33.50:7077 --deploy-mode client file:///home/vagrant/spark-1.0.2-bin-hadoop1/bin/hello-apache-spark_2.10-1.0.0-SNAPSHOT.jar

但它不起作用,当我尝试通过调用sbt run 以编程方式执行相同操作时

这是我在主节点上获得的堆栈跟踪:

14/09/04 15:09:44 ERROR Remoting: org.apache.spark.deploy.ApplicationDescription; local class incompatible: stream classdesc serialVersionUID = -6451051318873184044, local class serialVersionUID = 583745679236071411
java.io.InvalidClassException: org.apache.spark.deploy.ApplicationDescription; local class incompatible: stream classdesc serialVersionUID = -6451051318873184044, local class serialVersionUID = 583745679236071411
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:617)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
    at akka.serialization.JavaSerializer$$anonfun$1.apply(Serializer.scala:136)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
    at akka.serialization.JavaSerializer.fromBinary(Serializer.scala:136)
    at akka.serialization.Serialization$$anonfun$deserialize$1.apply(Serialization.scala:104)
    at scala.util.Try$.apply(Try.scala:161)
    at akka.serialization.Serialization.deserialize(Serialization.scala:98)
    at akka.remote.serialization.MessageContainerSerializer.fromBinary(MessageContainerSerializer.scala:58)
    at akka.serialization.Serialization$$anonfun$deserialize$1.apply(Serialization.scala:104)
    at scala.util.Try$.apply(Try.scala:161)
    at akka.serialization.Serialization.deserialize(Serialization.scala:98)
    at akka.remote.MessageSerializer$.deserialize(MessageSerializer.scala:23)
    at akka.remote.DefaultMessageDispatcher.payload$lzycompute$1(Endpoint.scala:55)
    at akka.remote.DefaultMessageDispatcher.payload$1(Endpoint.scala:55)
    at akka.remote.DefaultMessageDispatcher.dispatch(Endpoint.scala:73)
    at akka.remote.EndpointReader$$anonfun$receive$2.applyOrElse(Endpoint.scala:764)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
    at akka.actor.ActorCell.invoke(ActorCell.scala:456)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
    at akka.dispatch.Mailbox.run(Mailbox.scala:219)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

有什么办法可以解决这个问题? 提前谢谢你。

【问题讨论】:

  • 你试过用sbt run在本地运行它吗?
  • 感谢如来的帮助。是的,我已经用 local[10] 在本地尝试过——它有效。这就是为什么它看起来很奇怪,那个非常简单的例子在集群上运行起来如此困难
  • @Dr.Khu :我也想做同样的事情。你上面的程序提交一个jar到spark-submit?我有点困惑。请帮忙。
  • 是的,./spark-submit 是在集群上运行分布式作业的一种方式。我刚刚指出,通过这种方式我能够运行这项工作,但我需要在不使用 ./spark-submit 脚本的情况下这样做

标签: apache-spark


【解决方案1】:

在浪费了很多时间之后,我发现了问题所在。 尽管我没有在我的应用程序中使用 hadoop/hdfs,但 hadoop 客户端很重要。问题出在 hadoop-client 版本中,它与 hadoop 的版本不同,spark 是为之构建的。 Spark 的 hadoop 版本 1.2.1,但在我的应用程序中是 2.4。

当我在我的应用中将 hadoop 客户端的版本更改为 1.2.1 时,我能够在集群上执行 spark 代码。

【讨论】:

  • 不等我不明白你在这里做了什么。在您的代码中,它没有在任何地方提及 hadoop 客户端版本是什么。我也面临同样的问题,所以需要你的帮助。
  • 我的意思是,我使用了为 Hadoop 1.x 预构建的 1.0.2 版 spark,但我的 build.sbt 依赖于 Spark Core ("org.apache.spark" %% "spark-core" % "1.0.2") - 正确一个 - 和 hadoop 客户端 ("org.apache.hadoop" % "hadoop-client" % "2.4") - 这是不正确的,因为 spark 是为 hadoop 版本 1.x 构建的。当我将 hadoop 客户端的版本从 2.4 更改为 1.2.1 时,这个异常就消失了。
  • 我对 spark1.1.0 mvn -Dhadoop.version=1.2.1 -DskipTests clean package 的 maven 构建做了同样的事情,使用了你提到的版本,但我不断收到 java.io.InvalidClassException: org.apache .spark.storage.BlockManagerId;使用火花提交时运行良好..请帮助
  • 我下载了 spark-1.1.1-bin-hadoop2.4 的预构建版本,所以现在我的 spark 是为 hadoop 2.4 构建的,我不明白我的应用程序中的 hadoop 版本是什么意思跨度>
  • 我的意思是你在项目中使用的hadoop-client 版本。我不排除您遇到此问题的其他原因。
【解决方案2】:

您可以使用这样的依赖项(在 build.sbt 文件中定义),而不是使用常规的 Spark Core 库:

resolvers += "Talend" at "https://talend-update.talend.com/nexus/content/repositories/libraries/"
libraryDependencies += "org.talend.libraries" % "spark-assembly-1.6.0-hadoop2.6.0" % "6.0.0"

/!\ 那些 spark-assembly-...hadoop... 库可能非常大(因此与 Git 推送不兼容)。

List of Spark/Hadoop Libraries Hosted by Talend

【讨论】:

    【解决方案3】:

    如果您使用的是预构建的 spark。 (不安装 sbt 或 maven),确保所有工作节点使用相同版本的 spark。我遇到了同样的问题,因为其中一个工作节点正在使用不同版本的 spark。在所有节点上保持相同的版本为我解决了这个问题。一台机器使用 spark-2.0.0--bin-hadoop2.7 而不是 spark-2.0.0-preview-bin-hadoop2.7

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 2017-05-17
      相关资源
      最近更新 更多