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
。
spark.task.maxFailures
,
然后该作业将停止并且不再执行任何阶段。
3 个正在运行的任务将完成,但仅此而已。
一个多阶段的作业必须停止,因为只有前一个阶段的所有任务都完成后才能开始新的阶段。
【讨论】:
酷。你是如何测试解决方案的?你能分享任何有用的链接吗? 我从过去的合同中知道。我现在正在度假,所以并没有真正使用 Spark 集群。你可以在那里找到链接。谷歌在那个参数上。但这就是它的工作原理。【参考方案2】:转换是全部或全部操作。在上述情况下,Spark 将因分区 4 的错误而崩溃。
【讨论】:
那么程序会在写入3个分区后终止? 答案不一致。 是的。我认为该程序将继续用于剩余的分区。因为每个分区都有一个任务,如果其中一个失败并不意味着其他分区也会失败。我说的对吗? 我认为您是对的,但我们的业务是知道答案在哪里。 Questuon 也不是 pyspark 特有的。 “但我们的工作是知道答案在哪里”。对不起。没有得到这条线以上是关于Spark中转换的失败处理的主要内容,如果未能解决你的问题,请参考以下文章
使用 403 写入 S3 时,在 EMR 上运行的 Spark 偶尔会失败