0

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

4

1 回答 1

0

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

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

  • 初始化阶段:我们设置地图任务
  • 执行阶段:对于 map split 中的每个 (key, value) 元组,我们运行 map() 函数
  • SPILLING 阶段:map 输出存储在内存缓冲区中;当这个缓冲区快满时,我们开始(并行)溢出阶段,以便从中删除数据
  • SHUFFLE 阶段:在溢出阶段结束时,我们合并所有 map 输出并将它们打包以用于 reduce 阶段

单个 MapTask 生命周期

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

在此处输入图像描述

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

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

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

于 2018-02-07T20:15:34.380 回答