是 mapreduce 中洗牌的一部分

Is sort part of shuffle in mapreduce

系统在地图端对地图输出进行排序的过程称为排序。这是洗牌的一部分吗?换句话说,shuffle 什么时候开始? map输出写入磁盘后,或者map输出写入内存缓冲区后

这里详细解释了整个 Map-reduce 处理过程:http://ercoppa.github.io/HadoopInternals/AnatomyMapReduceJob.html

为了回答您的问题,单个地图任务的步骤包括:

  • INIT 阶段:我们设置 Map 任务
  • 执行阶段:对于映射中的每个(键,值)元组,我们 运行 map() 函数
  • SPILLING阶段:地图输出存储在内存缓冲区中;当这个 缓冲区几乎已满,然后我们开始(并行)溢出阶段以从中删除数据
  • SHUFFLE阶段:结束时 溢出阶段,我们合并所有地图输出并将它们打包用于 减少相位

执行和溢出阶段并行发生。所以,数据写入循环缓冲内存 -> 在内存中排序 -> 当缓冲区满 80% -> 写入本地磁盘。

在EXECUTION阶段结束时,最后一次触发SPILLING线程。更详细地说,我们:

  • 排序并溢出剩余的未溢出的元组
  • 开始洗牌阶段

请注意,每次缓冲区快满时,我们都会得到一个溢出文件(SpillReciord + 输出文件)。每个 Spill 文件包含几个分区(段)。