系统对map端的map输出进行排序的过程称为排序。这是洗牌的一部分吗?换句话说,洗牌什么时候开始?映射输出写入磁盘后,或映射输出写入内存缓冲区后
问问题
72 次
1 回答
0
此处详细解释了整个 Map-reduce 处理:http: //ercoppa.github.io/HadoopInternals/AnatomyMapReduceJob.html
要回答您的问题,单地图任务中的步骤包括:
- 初始化阶段:我们设置地图任务
- 执行阶段:对于 map split 中的每个 (key, value) 元组,我们运行 map() 函数
- SPILLING 阶段:map 输出存储在内存缓冲区中;当这个缓冲区快满时,我们开始(并行)溢出阶段,以便从中删除数据
- SHUFFLE 阶段:在溢出阶段结束时,我们合并所有 map 输出并将它们打包以用于 reduce 阶段
执行和溢出阶段并行发生。因此,数据写入循环缓冲内存 -> 在内存中排序 -> 当缓冲区已满 80% 时 -> 写入本地磁盘。
在执行阶段结束时,最后一次触发 SPILLING 线程。更详细地说,我们:
- 排序并溢出剩余的未溢出元组
- 开始 SHUFFLE 阶段
请注意,每次缓冲区几乎满时,我们都会得到一个溢出文件(SpillReciord + 输出文件)。每个溢出文件包含几个分区(段)。
于 2018-02-07T20:15:34.380 回答