Hadoop组合器排序阶段

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界面中显示的排序阶段具有误导性.这只是纯粹的合并.