是否为失败的地图任务调用了cleanup()方法?

时间:2013-07-02 05:24:14

标签: hadoop mapreduce mapper

是否为失败的地图任务调用了cleanup()方法?如果是这样,它如何确保“原子性”?

就我而言,我正在mapper中准备一些在cleanup()方法中写入DB的统计信息。在这种情况下,如果映射器在执行其输入拆分的过程中失败,则清理方法会将直到处理的数据写入DB?这将导致不正确的统计信息,因为备用映射器尝试也将再次写入相同的数据。

1 个答案:

答案 0 :(得分:2)

根据映射器何时失败,可以调用或不调用清理。例如,如果mapper在map方法中失败,则不会调用清理。但是如果你的mapper在清理方法中失败,那么已经调用了清理。

如果映射器失败,hadoop通常会在另一台机器上重新启动映射器任务。因此,您需要确保多次运行映射器或减速器始终输出相同的结果,否则将难以调试。

根据您的情况,您可以设置一些计数器来收集统计数据,并在您的工作成功后阅读计数器。如果某个映射器失败,则部分计数器将被删除。您的工作成功后的计数器将保证是正确的。