从一些文章中,我知道组合器将在mapper-side和reducer-side中运行,并且它将运行0~N次。而且我知道无论是否调用组合器,我们的mapreduce程序都应该得到相同的结果。
但我有一个特殊的情况,需要至少召唤一次合并器,有谁知道如何确保?
PS,在maptask.java
中,我看到了这句话:
if (null == combinerClass || numSpills < minSpillsForCombine) {
Merger.writeFile(kvIter, writer, reporter);
} else {
combineCollector.setWriter(writer);
combineAndSpill(kvIter, combineInputCounter);
}
如果我将 minSpillsForCombine 设置为零,我是否可以确保至少调用一次合并器?
非常感谢!
答案 0 :(得分:2)
如果你需要组合器至少运行一次,你就会误用组合器。它的作用是严格可选的,折叠具有关联/交换性质的值。如果您更多地了解原因,可能会建议更好的设计。
答案 1 :(得分:2)
希望这有帮助。