从一些文章中,我知道 combiner 会在 mapper 端和 reducer 端运行,并且会运行 0~N 次。而且我知道无论是否调用组合器,我们的 mapreduce 程序都应该得到相同的结果。
但是我有一种特殊情况需要至少调用一次组合器,有人知道如何确保吗?
PS,在maptask.java
,我看到了这条线:
if (null == combinerClass || numSpills < minSpillsForCombine) {
Merger.writeFile(kvIter, writer, reporter);
} else {
combineCollector.setWriter(writer);
combineAndSpill(kvIter, combineInputCounter);
}
如果我将minSpillsForCombine设置为零,我可以确保至少调用一次组合器吗?
非常感谢!