官网使用了三张图来描述shuffle 过程 ,Map 和 reduce 是我们自己写的程序,所以没有写进这三个图里面,今天主要围绕这三张图我们做一个简单的说明和复习 :
第一张图,从整体上把握流程
上图提供的是整个流程的一部分,全部流程应该是有 4 个 Map ,3 个 Reduce ,这里只有一个map 一个 reduce
第一个问题 : partition 什么时候做 ?
partition 是一直会做的,不管有几个reduce 任务 ,默认是一个reduce ,所以默认也就是一个partition ,这两个在数量上是一致的 ,在这里reduce 有三个,所以 partition 也就有三个 。现在回答问题 ,partition 什么时间做的 ,上图的 buffer in memory 是map 处理后的数据写入缓存的一个步骤,partition 会在这个步骤前的步骤做 。(partition 可能会为数据加入一个标志,哈哈 现在不确定,但是这样理解应该不会产生歧义)
第二个问题 : 溢写机制
buffer in memory 的空间是有限的,所以当空间达到一定的阀值后就会写到磁盘上,按partition 写 ,上图可以看到 partitions 有三个
第三个问题: merge and sort
在有merge 地方就会有sort 发生,这个当然会影响效率问题 ,很多时间是不需要sort 的 ,map 的最后阶段 会把所有的小的merge 的数据merge 成一个更大的文件,这个文件也是分区的。
第四个问题 :reduce 阶段,也会有merge ,sort
reduce 会发出命令,到指定的datanode 的 copy 相应的partition 数据 ,并把所有的copy 过来的数据merge
第五个问题 : reduce 阶段 也需要用到内存溢写
第六个问题 : group by 发生在 reduce 结果
第七个问题: combline 发生在map 结果,目的是减少map 键值对的输出
第八个问题: 从map 到reduce 用的是http 协议,走网络通信。
=================================华丽分割线==================
亮瞎眼