1. 分区partition
每个MapTask的输出都会被分割为多个分区,Reducer会根据JobTask维护的映射关系获取自己应该处理的那一份。
有多少个Reducer,Mapper的输出就应该有多少个分区。
这个分区动作叫做partition,具体逻辑是由partitioner类实现(用户可以自定义自己的partitioner),partition的职责就是保证MapTask输出的数据中具有同类Key的数据进入同一个Reducer进行处理。
3. 三次排序
Mapper输出阶段,缓冲区溢写时,溢写结果是分区内排序的。
Shuffle阶段,合并溢写文件时需要分区内排序(归并排序)。
Copy阶段(Reducer输入阶段),从各个Mapper收集过来的数据先入Reducer的缓冲区,溢写(merge)时整体排序(归并排序)。
本文详细介绍了MapReduce中的分区partition概念及其实现原理,并解释了三次排序的过程:包括Mapper输出阶段的缓冲区溢写排序、Shuffle阶段的归并排序以及Reducer输入阶段的整体排序。
687

被折叠的 条评论
为什么被折叠?



