Spark中转换的失败处理

Posted

技术标签:

【中文标题】Spark中转换的失败处理【英文标题】:Failure Handling of transformations in Spark 【发布时间】:2020-06-29 08:19:25 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

酷。你是如何测试解决方案的?你能分享任何有用的链接吗? 我从过去的合同中知道。我现在正在度假,所以并没有真正使用 Spark 集群。你可以在那里找到链接。谷歌在那个参数上。但这就是它的工作原理。【参考方案2】:

转换是全部或全部操作。在上述情况下,Spark 将因分区 4 的错误而崩溃。

【讨论】:

那么程序会在写入3个分区后终止? 答案不一致。 是的。我认为该程序将继续用于剩余的分区。因为每个分区都有一个任务,如果其中一个失败并不意味着其他分区也会失败。我说的对吗? 我认为您是对的,但我们的业务是知道答案在哪里。 Questuon 也不是 pyspark 特有的。 “但我们的工作是知道答案在哪里”。对不起。没有得到这条线

以上是关于Spark中转换的失败处理的主要内容,如果未能解决你的问题,请参考以下文章

将大型 Spark 数据帧从数据块写入 csv 失败

使用 403 写入 S3 时,在 EMR 上运行的 Spark 偶尔会失败

将数据集写入 MS SQL 服务器失败

在 Spark 上训练 Kmeans 算法失败

如何在火花中处理 Integer.MAX_VALUE? [关闭]

【2019-01-04】Spark 程序在driver卡住