0

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

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

4

1 回答 1

3

根据您的映射器何时失败,可能会调用或不调用清理。例如,如果您的映射器在 map 方法中失败,则不会调用清理。但是,如果您的映射器在清理方法中失败,则清理已被调用。

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

针对您的情况,您可以设置一些 Counters 来收集统计数据并在 Job 成功后读取 Counters。如果某些映射器失败,则计数器部分将被丢弃。您的工作成功后的计数器将保证是正确的。

于 2013-07-02T06:07:37.270 回答