Shuffle阶段的概述
Shuffle是连接map,reduce两个管道的衔接套。Map的输出经过partition写到内存的buffer里面,当内存满了的时候,会排序写到零时文件,这样当mapTask整个运行完之后,会产生一大堆零时文件,shuffle要把它们merge在一起。(会调用combine函数)
Reduce端通过TaskTracker监听到自己的需要数据的哪个map运行完了,就回去pull数据,先copy到本地,然后把从不同Node搞来的数据merge成一个大文件。作为Reduce job的输入。
Map端详述
1,主要代码阅读参考MapTask类。
2,主要的参数
- spillper,设置buffer使用率达到多少时,开始写零时文件,默认是0.8
- sortmb:内存buf的大小,默认是100MB
- indexCacheMemoryLimit:内存index的大小,默认是1024*1024
- sorter:对mapper输出的key进行排序,默认是quick sort
3,主要流程
- 对 Map的输出键值对计算partition,写入buffer(MapOutputBuffer类)。
- buffer内存使用率达到spillper值时,会冻结这部分并写到零时文件中。
- merge阶段,多路归并算法把零时有序文件合并成一个整体有序文件。
Reduce端详述
1,主要代码阅读参考MergeManagerImpl类
2&#