gpt4 book ai didi

hadoop - 弹性 map 减少 : continue on error?

转载 作者:可可西里 更新时间:2023-11-01 15:17:59 26 4
gpt4 key购买 nike

我们相当广泛地使用 Elastic Map Reduce,并且正在用它处理越来越多的数据。有时我们的工作失败是因为数据格式不正确。我们不断修改我们的 map 脚本以处理各种异常,但有时仍有一些格式错误的数据设法破坏我们的脚本。

  1. 是否可以将 Elastic Map Reduce 指定为“继续出错”,即使某些 map 或 reduce 作业失败了?

  2. 至少,是否可以增加整个集群失败的最小失败任务数(有时,我们在 500 个左右的作业中只有 1 个失败的作业,我们希望至少获得这些结果并让集群继续运行。)

  3. 此外,虽然我们可以修改 map 脚本来处理新的异常,但我们使用默认的 Hadoop“聚合”reducer,当它失败时,我们无法捕获异常。是否有任何特殊的方法来处理“聚合”reducer 中的错误,或者我们是否必须使用上面问题 #2 中可用的任何东西(增加失败任务的最小数量。)

最佳答案

您可能会在 mapper 和 reducer 中捕获 Exception,并且在 catch block 内有一个计数器,如下所示:

catch (Exception ex){
context.getCounter("CUSTOM_COUNTER", ex.getMessage()).increment(1);
System.err.println(GENERIC_INPUT_ERROR_MESSAGE + key + "," + value); // also log the payoad which resulted in the exception
ex.printStackTrace();
}

如果异常消息是您所期望的,并且计数器的值是可以接受的,那么您可以继续查看结果或调查日志。我知道不建议捕获 Exception 但如果您想“继续出错”,那么它几乎是同一回事。由于这里的集群成本受到威胁,我认为我们最好捕获 Excpetion 而不是特定的异常。

不过,它可能会有副作用,例如您的代码可能会在完全错误的输入上运行,如果没有捕获,它可能会更早地失败。但是发生这种情况的可能性非常小。

编辑:

对于第 2 点,您可以使用以下设置每个跟踪器允许的最大失败次数:

        conf.setMaxTaskFailuresPerTracker(noFailures);

您必须设置的配置是mapred.max.tracker.failures。您可能知道默认值为 4。对于所有其他 mapred 配置,请参阅 here .

关于hadoop - 弹性 map 减少 : continue on error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14990445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com