MR -- Shuffle机制

1、流程详解
Map 方法之后,Reduce 方法之前的数据处理过程被称为 Shuffle,具体流程为:
(1) MapTask 收集 map() 方法输出的 kv 对,放到内存缓冲区中。
(2) 从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件。
(3) 多个溢出文件会被合并成大的溢出文件。
(4) 在溢出过程及合并的过程中,都要调用 Partitioner 进行分区和针对 key 进行排序。
(5) ReduceTask 根据自己的分区号,去各个 MapTask 机器上取相应的结果分区数据。
(6) ReduceTask 会取到同一个分区的来自不同 MapTask 的结果文件,ReduceTask 会将这些文件再进行合并(归并排序)。
(7) 合并成大文件后,Shuffle 的过程也就结束了,后面进入 ReduceTask 的逻辑运算过程(从文件中取出一个一个的键值对 Group,调用用户自定义的 reduce() 方法)。

2、注意点
Shuffle 中的缓冲区大小会影响到 MapReduce 程序的执行效率,原则上说,缓冲区越大,磁盘 io 的次数越少,执行速度就越快。缓冲区的大小可以通过参数调整,参数:io.sort.mb 默认100M。

3、Shuffle 图示
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章