当前位置: 首页 > 知识库问答 >
问题:

Apache Spark:作业因阶段失败而中止:“TID x因未知原因失败”

谭正谊
2023-03-14

我正在处理一些奇怪的错误信息,我认为这可以归结为内存问题,但我很难确定它,可以从专家那里得到一些指导。

我有一个两台机器的Spark(1.0.1)集群。两台机器都有8个核心;一台有16GB内存,另一台有32GB内存(这是主)。我的应用程序涉及计算图像中的成对像素亲和力,尽管我测试的图像到目前为止只有1920x1200大,16x16小。

我确实必须改变一些内存和并行性设置,否则我会得到显式的OutOfMemoryExceptions。在spark-default.conf:

spark.executor.memory    14g
spark.default.parallelism    32
spark.akka.frameSize        1000

在spark env。上海:

SPARK_DRIVER_MEMORY=10G

然而,通过这些设置,除了丢失的执行器之外,我还得到了一系列关于“丢失的TID”(没有任务成功完成)的警告语句,这些语句重复了4次,直到我最终得到以下错误消息并崩溃:

14/07/18 12:06:20 INFO TaskSchedulerImpl: Cancelling stage 0
14/07/18 12:06:20 INFO DAGScheduler: Failed to run collect at /home/user/Programming/PySpark-Affinities/affinity.py:243
Traceback (most recent call last):
  File "/home/user/Programming/PySpark-Affinities/affinity.py", line 243, in <module>
    lambda x: np.abs(IMAGE.value[x[0]] - IMAGE.value[x[1]])
  File "/net/antonin/home/user/Spark/spark-1.0.1-bin-hadoop2/python/pyspark/rdd.py", line 583, in collect
    bytesInJava = self._jrdd.collect().iterator()
  File "/net/antonin/home/user/Spark/spark-1.0.1-bin-hadoop2/python/lib/py4j-0.8.1-src.zip/py4j/java_gateway.py", line 537, in __call__
  File "/net/antonin/home/user/Spark/spark-1.0.1-bin-hadoop2/python/lib/py4j-0.8.1-src.zip/py4j/protocol.py", line 300, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o27.collect.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0.0:13 failed 4 times, most recent failure: TID 32 on host master.host.univ.edu failed for unknown reason
Driver stacktrace:
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1044)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1028)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1026)
    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.abortStage(DAGScheduler.scala:1026)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:634)
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:634)
    at scala.Option.foreach(Option.scala:236)
    at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:634)
    at org.apache.spark.scheduler.DAGSchedulerEventProcessActor$$anonfun$receive$2.applyOrElse(DAGScheduler.scala:1229)
    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/07/18 12:06:20 INFO DAGScheduler: Executor lost: 4 (epoch 4)
14/07/18 12:06:20 INFO BlockManagerMasterActor: Trying to remove executor 4 from BlockManagerMaster.
14/07/18 12:06:20 INFO BlockManagerMaster: Removed 4 successfully in removeExecutor
user@master:~/Programming/PySpark-Affinities$

如果我运行非常小的映像(16x16),它似乎会运行到完成(在不引发任何异常的情况下为我提供预期的输出)。然而,在运行的应用程序的stderr日志中,它将状态列为“KILLED”,最后一条消息是“ERROR-grazedExecutorBackend:Driver Disassociated”。如果我运行任何较大的图像,我会得到上面粘贴的异常。

此外,如果我只使用master=local[*]进行spark submit,除了仍然需要设置前面提到的内存选项外,它还适用于任何大小的映像(我已经独立测试了这两台机器;它们都是在以local[*]运行时进行测试的)。

知道发生了什么吗?

共有2个答案

堵毅然
2023-03-14

这个很难抓住!问题是spark版本1.0.1,它没有指出实际的错误,但称其为“未知原因”,因此很难找到问题的原因。使用--driver class path path_to_spark_应用程序运行spark应用程序,这将给出作业失败的正确错误。我的感觉很好。我想spark 1.6及以上版本的问题已经解决了。

岳正阳
2023-03-14

如果每次我问别人“你有没有尝试过将分区数量增加到相当大的程度,比如每个CPU至少4个任务,甚至高达1000个分区?”时我都有一分钱我会成为一个有钱人。你试过增加分区吗?

不管怎么说,我还发现了一些有助于处理离奇关系的事情:

  • 帧大小500
  • html" target="_blank">请求超时100
  • 工作超时150(处理大量GC挂起)
  • 摆弄内存缓存(参见Sparkjava.lang.OutOfMemoryError:Java堆空间)

有时,通过使用UI导航到特定的workers stderr日志,可以获得更多信息量的堆栈跟踪。

更新:由于spark 1.0.0无法通过UI查找spark日志,您必须请求sysadm/devops帮助您,因为日志的位置完全没有记录。

 类似资料:
  • 我的理解是,这是SparkR的一个非常基本的功能,所以我真的不知道为什么它不能工作。由于某种原因,当我使用直接从数据源读取时,我没有问题。还有,我注意到错误行中的数字“:stage xxx中的task 0..”每次失败时递增1。 我还注意到,错误似乎来自于执行程序找不到的二进制文件,尽管我不确定为什么这只会发生在从本地data.frames创建的SparkDataFrames中,而不是从外部数据源

  • 问题内容: 由于当前在Spring中对Hibernate 4的支持不足,我不得不将Hibernate从版本4降级到版本3(具体来说是3.3.2GA),现在该项目在尝试使用hbm2ddl生成架构时无法构建。这个错误太模糊了,谷歌并没有带来太多收益。 这是我的pom.xml: 跑步 失败于 完整的堆栈跟踪为: 希望有人可以对此有所启发! 问题答案: 在尝试使havennate模型使maven引导数据库

  • 错误:org.kitesdk.data.datasetoperationexception:未能追加{“clg_id”:“5”,.....19/03/27 00:37:06 INFO mapreduce.job:任务Id:advitt_15088_130_m_0002,状态:失败 查询以创建保存的作业: sqoop job-dhadoop.security.credential.provider.

  • 我有一个Quarkus服务,我在启动时发布了一个SOAP服务,如下所示: 当我到达该endpoint时,我得到: 我想这可能是一个依赖冲突,但是我的依赖树中没有什么特别的。这是从Quarkus启动SOAP服务的正确方法吗? 以下是pom中的依赖项: quar kus 1 . 2 . 0版

  • 我使用的是Cassnadra 2.1.13单节点集群和数据库运行良好,没有任何问题。 在单个节点集群中,出现这些异常的原因是什么,特别是同步失败,有什么提示或指针可以找到这个问题的根本原因吗? 错误[MemtableFlushWriter:21]StorageService.java:453-停止gossiper警告[MemtableFlushWriter:21]StorageService.ja

  • 我们正在使用Powermockito和Mockito来模拟一些静态类。似乎每次都会抛出。 你能帮我找出问题出在哪里吗? 测试中的Java类 使用Powermock runner进行Junit测试 进程已完成,退出代码为255 注: 实际底层elasticsearch类的源代码可以在这里找到 https://github.com/elastic/elasticsearch/blob/master/c