MapReduce中的Shuffle过程分为Map端和Reduce端两个过程。
Map端:
Map Task的过程主要由下面五步组成:Read --> Map --> Collect --> Spill --> Combine,其中Shuffle主要包括后面三步。
1.(Collect)在Map函数中调用collect(k.v),在collect中调用partitioner函数获取键值对分区号(partition),将三元组<key,value,partition>传给collect()做处理。
2.(Spill)MapOutputBuffer内部使用一个环形缓冲区存储输出结果(环形缓冲区可以同时读写),当达到阀值时,将数据排序(先按partition排序,再按key排序)写到临时文件(本地磁盘)中。(环形缓冲区使得Collect阶段和Spill阶段可以同时进行)