Mic*_*ior 10 hadoop mapreduce combiners
使用指定的组合器运行MapReduce作业时,组合器是否在排序阶段运行?我知道组合器在每个溢出的mapper输出上运行,但似乎在合并排序的中间步骤中运行也是有益的.我在这里假设在排序的某些阶段,某些等效键的映射器输出在某些时候保存在内存中.
如果目前没有这种情况,是否有特殊原因,或者只是尚未实施的内容?
提前致谢!
Tho*_*lut 14
组合器可以节省网络带宽.
mapoutput直接排序:
sorter.sort(MapOutputBuffer.this, kvstart, endPosition, reporter);
Run Code Online (Sandbox Code Playgroud)
这在实际映射完成后立即发生.在通过缓冲区的迭代期间,它检查是否已经设置了组合器,如果是,则组合记录.如果没有,它会直接溢出到磁盘上.
MapTask
如果您想亲眼看到它,那么重要的部分就在其中.
sorter.sort(MapOutputBuffer.this, kvstart, endPosition, reporter);
// some fields
for (int i = 0; i < partitions; ++i) {
// check if configured
if (combinerRunner == null) {
// spill directly
} else {
combinerRunner.combine(kvIter, combineCollector);
}
}
Run Code Online (Sandbox Code Playgroud)
这是保存磁盘空间和网络带宽的正确阶段,因为很可能必须传输输出.在合并/混洗/排序阶段,它没有用处,因为与地图结束时的组合器运行相比,你必须处理更多的数据量.
请注意,Web界面中显示的排序阶段具有误导性.这只是纯粹的合并.
归档时间: |
|
查看次数: |
7164 次 |
最近记录: |