首页 > 解决方案 > Spark中转换的失败处理

问题描述

我将所有数据从 s3 读入 pyspark 数据帧。我在数据帧上应用过滤器转换。然后将数据帧写入 S3。

假设数据帧有 10 个分区,每个分区 64MB。现在假设分区 1、2 和 3 的过滤和写入成功,并且数据已写入 S3。

现在让我们说第 4 分区的过滤器错误。

这之后会发生什么。spark 会继续处理所有剩余的分区并离开分区 4,还是只写入 3 个分区后程序会终止?

标签: apache-sparkhadooppysparkapache-spark-sql

解决方案


非本地操作模式的相关参数是:spark.task.maxFailures

  • 如果您有 32 个任务和 4 个执行程序,其中 7 个已运行,4 个正在运行,21 个任务在该阶段等待,
    • 然后,如果 4 个中的一个失败的次数比spark.task.maxFailures重新安排后的次数多,
      • 然后 Job 将停止并且不再执行阶段。
      • 3 个正在运行的任务将完成,仅此而已。

一个多阶段的作业必须停止,因为只有前一阶段的所有任务都完成后才能开始新的阶段。


推荐阅读