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