是mapreduce中的shuffle的一部分

时间:2018-02-07 14:59:19

标签: shuffle mkmaprect

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

1 个答案:

答案 0 :(得分:0)

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

要回答您的问题,单一地图任务中的步骤包括:

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

Single MapTask lifecycle

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

enter image description here

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

  • 对剩余的未填充元组进行排序和溢出
  • 启动SHUFFLE阶段

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