Apache Spark抛出java.lang.IllegalStateException:未读块数据

时间:2014-05-17 10:08:25

标签: scala hadoop hdfs apache-spark

我们正在做的是:

  1. 根据网站上的文档安装Spark 0.9.1,以及带有hadoop / hdfs的CDH4(和另一个带有CDH5的集群)。
  2. 使用带有sbt的Spark应用程序构建胖jar,然后尝试在群集上运行它
  3. 我还包括代码段和底部的sbt deps。

    当我用Google搜索时,似乎有两种模糊的回答: a)节点/用户代码上的火花版本不匹配 b)需要向SparkConf添加更多jar

    现在我知道(b)不是在其他集群上成功运行相同代码的问题,而只包含一个jar(它是一个胖罐)。

    但是我不知道如何检查(a) - 看起来Spark没有任何版本检查或任何东西 - 如果它检查版本并抛出一个"不匹配的版本异常会很好:您拥有使用版本X的用户代码,而节点Y具有版本Z"。

    我非常感谢有关这方面的建议。我提交了一个错误报告,因为Spark文档必须有问题,因为我已经看到两个独立的系统管理员在不同的群集上获得了与不同版本的CDH完全相同的问题。 https://issues.apache.org/jira/browse/SPARK-1867

    例外:

    Exception in thread "main" org.apache.spark.SparkException: Job aborted: Task 0.0:1 failed 32 times (most recent failure: Exception failure: java.lang.IllegalStateException: unread block data)
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$org$apache$spark$scheduler$DAGScheduler$$abortStage$1.apply(DAGScheduler.scala:1020)
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$org$apache$spark$scheduler$DAGScheduler$$abortStage$1.apply(DAGScheduler.scala:1018)
        at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
        at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
        at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$abortStage(DAGScheduler.scala:1018)
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$processEvent$10.apply(DAGScheduler.scala:604)
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$processEvent$10.apply(DAGScheduler.scala:604)
        at scala.Option.foreach(Option.scala:236)
        at org.apache.spark.scheduler.DAGScheduler.processEvent(DAGScheduler.scala:604)
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$start$1$$anon$2$$anonfun$receive$1.applyOrElse(DAGScheduler.scala:190)
        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)
    14/05/16 18:05:31 INFO scheduler.TaskSetManager: Loss was due to java.lang.IllegalStateException: unread block data [duplicate 59]
    

    我的代码段:

    val conf = new SparkConf()
                   .setMaster(clusterMaster)
                   .setAppName(appName)
                   .setSparkHome(sparkHome)
                   .setJars(SparkContext.jarOfClass(this.getClass))
    
    println("count = " + new SparkContext(conf).textFile(someHdfsPath).count())
    

    我的SBT依赖项:

    // relevant
    "org.apache.spark" % "spark-core_2.10" % "0.9.1",
    "org.apache.hadoop" % "hadoop-client" % "2.3.0-mr1-cdh5.0.0",
    
    // standard, probably unrelated
    "com.github.seratch" %% "awscala" % "[0.2,)",
    "org.scalacheck" %% "scalacheck" % "1.10.1" % "test",
    "org.specs2" %% "specs2" % "1.14" % "test",
    "org.scala-lang" % "scala-reflect" % "2.10.3",
    "org.scalaz" %% "scalaz-core" % "7.0.5",
    "net.minidev" % "json-smart" % "1.2"
    

2 个答案:

答案 0 :(得分:3)

更改

"org.apache.hadoop" % "hadoop-client" % "2.3.0-mr1-cdh5.0.0",

"org.apache.hadoop" % "hadoop-common" % "2.3.0-cdh5.0.0"

在我的应用程序中,代码似乎解决了这个问题。不完全确定原因。我们在集群上有hadoop-yarn,所以也许“mr1”破坏了东西。

答案 1 :(得分:0)

我最近遇到了CDH 5.2 + Spark 1.1.0的这个问题。

原来问题出在我正在使用的spark-submit命令中

- 主纱

而不是新的

- 主纱簇