Hadoop【2.1】 Shuffle概述
在每个maptask的结束,我们拿到的是<K,V>的队列,在Reduce中,输入的是<K,Iterable V>。在中间有一个被称为Shuffle的工作,将Maptask的数据按Key排序。其主要的工作,大体上讲1.完整地从map task端拉取数据到reduce端。2.在跨节点拉取数据时,尽可能地减少对带宽的不必要消耗。3.减少磁盘IO对task执行的影响。(主要的优化工作在于更多的使用内存而非磁盘IO) 部分转自 https://www.cnblogs.com/sunfie/p/4928662.html ; MapTask的Shuffle 从四个方面来讲Map这块的Shuffle,map结果写入磁盘 ; 缓存数据的分区(Partition)分组(Combiner)排序(Sort) ; 文件合并 (Merge); 1.map结果写入磁盘 对于并行的map工作,产生了许多结果输出,首先我们讲各个节点上得到的结果存到一个环形内存缓冲区里(填到80%就往外拿数据了,不然满了,剩下20%继续读map的数据),当缓冲区全满了,那map就阻塞吧,直到写磁盘结束了再继续。写出去的文件叫做溢出文件(Spill),这个溢写是由单独线程来完成,不影响往缓冲区写map结果的线程,溢写线程启动时不应该阻止map结果的输出。 2.缓存数据的分区(Partition)分组(Combiner)排序(Sort)