1. MapTask 溢写时执行
环形缓存区溢写时在快速排序之后溢写之前Combiner 如果不为空则先进行Combiner合并
源码位置
org.apache.hadoop.mapred.MapTask.MapOutputBuffer#sortAndSpill
if (combinerRunner ==null) {
}els{
}
2. 当前MapTask 所有溢写文件溢写完成后,进行溢写文件归并时可能发生Combiner 操作
源码位置
org.apache.hadoop.mapred.MapTask.MapOutputBuffer#mergeParts
if (combinerRunner == null || numSpills < minSpillsForCombine) {
Merger.writeFile(kvIter, writer, reporter, job);
} else {
combineCollector.setWriter(writer);
combinerRunner.combine(kvIter, combineCollector);
}
此时当 combiner不为空,并且溢写次数大于3时进行combiner 操作
网友评论