是否为失败的 map task 调用cleanup()方法?如果是这样,它如何确保“原子性”?
在我的情况下,我正在准备一些映射器中的统计信息,这些统计信息将通过cleanup()方法写入数据库。在这种情况下,如果一个映射器在执行其输入拆分的过程中失败,则清理方法会将直到处理的数据写入DB?这将导致错误的统计信息,因为备用映射器尝试还将再次写入相同的数据。
最佳答案
根据您的映射器失败的时间,是否可以调用清除。例如,如果您的映射器在map方法中失败,则将不会调用清理。但是,如果您的映射器的清除方法失败,则该清除已被调用。
如果映射器失败,hadoop通常会在另一台计算机上重新启动映射器任务。因此,您需要确保多次运行映射器或化简器总是输出相同的结果,否则将很难调试。
根据您的情况,您可以设置一些计数器来收集统计数据,并在工作成功后读取计数器。如果某些映射器失败,则“计数器”部分将被丢弃。工作成功后的计数器将保证正确。
关于hadoop - 失败的 map task 会调用cleanup()方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17417938/