【问题标题】:spark - contiue job processing after tasks failurespark - 任务失败后继续作业处理
【发布时间】:2016-08-19 18:51:32
【问题描述】:

有没有办法告诉 spark 在单个任务失败后继续工作?

甚至更好: 我们是否可以将作业配置为仅在一定百分比的任务失败时才失败?

我的场景是这样的: 我正在使用 pyspark 进行一些并行计算。 我有一份由数千个任务组成的工作(它们或多或少相互独立——我可以允许一些任务失败)。 1 个任务失败(抛出异常),并且在此任务重试几次后,整个作业被中止。

有没有办法改变这种(奇怪的)行为?

【问题讨论】:

  • 抛出什么异常?我在想,如果你知道某些任务可能会失败,你可以编写你的 spark 代码来处理这个问题。任务只有在出现严重错误时才会失败 - 例如,如果您使用了过多的内存。
  • 这就是我要做的。抛出的异常是由于错误(其他程序员:-))我更喜欢基础设施来处理这个而不是我,因为失败的任务可以显示在 UI 等中。我想我别无选择,但自己捕获异常并逐步处理。
  • 我不认为依靠集群来处理已知/未知的错误是一个好主意。无法保证结果的正确性。
  • 抛出异常是一种表示“我有故障”的方式 - 集群应该处理这个 - 在 ui 等中显示它。并非所有的异常都意味着错误 - 有些可能表明数据不是好 - 我的数据来自物理信号。我现在必须自己收集故障并在处理结束时显示它——这是集群应该提供的。集群也应该提供 taks 失败的实现阈值 - 就像在 hadoop 中一样。
  • 另外,考虑一个用例,其中 spark 批处理作业运行数十个人的代码 - 您希望允许人们在不实施花哨的代码基础架构的情况下失败他们的任务。

标签: apache-spark configuration pyspark


【解决方案1】:

不,spark 中没有这样的功能。 有一张开放的 jira 票(SPARK-10781),但我没有看到任何行动。

你可以在 mapreduce 中使用 config mapreduce.map.failures.maxpercent and mapreduce.max.reduce.failures.percent 来完成它

【讨论】:

  • 哇——太不可思议了。对我来说,它几乎是一个火花塞。这是一件大事 - 没什么。
  • 另外,mapreduce 不适合我。我正在为对 Java 一无所知的 Python 开发人员构建基础设施
  • 配置 spark.task.maxFailures 默认为 4 表示失败的任务将被重试 4 次然后将它们标记为失败。您可以将此配置的值增加到可能为 8 以便您可以成功完成的其他工作任务可以在工作失败之前继续。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
相关资源
最近更新 更多