我们广泛使用弹性Map约简,并用它处理越来越多的数据。有时我们的工作失败是因为数据格式不正确。我们不断修改map脚本以处理各种异常,但有时仍然有一些格式错误的数据破坏了我们的脚本。
即使某些map或reduce作业失败,是否可以将弹性map reduce指定为“出错时继续”?
至少,是否可以增加整个集群失败的最小失败任务数(有时,在500个左右的作业中,我们只有一个失败的作业,我们希望至少获得这些结果,并让集群继续运行。)
另外,虽然我们可以修改map脚本来处理新的异常,但我们使用默认的hadoop“聚合”缩减器,当它失败时,我们无法捕获异常。是否有任何特殊的方法来处理“聚合”缩减器中的错误,或者我们是否必须使用上面问题2中的任何可用方法(增加失败任务的最小数量)
2条答案
按热度按时间dtcbnfnu1#
如果我没看错您的问题,您可以让集群在出现故障时继续执行基于ruby的emr命令行工具中的elasticmapreduce调用中定义的下一步
jgzswidk2#
你可能会抓到
Exception
在mapper和reducer中以及catch块内部都有如下计数器:如果异常消息是您所期望的,并且计数器的值是可接受的,那么您可以继续处理结果,或者调查日志。我知道接球
Exception
不建议这样做,但是如果你想“继续出错”,那就差不多了。既然集群的成本岌岌可危,我认为我们最好抓捕Excpetion
而不是特定的例外。不过,它可能会有副作用,例如您的代码可能在完全错误的输入上运行,如果不是catch,它可能会更早失败。但发生这种事情的可能性非常小。
编辑:
对于第2点,您可以使用以下方法设置每个跟踪器允许的最大故障数:
或
必须设置的配置是
mapred.max.tracker.failures
. 如您所知,默认值为4。对于所有其他Map配置,请参见此处。