1,是 MapReduce 的 Shuffle 过程 指的是 MapTask的后半程,以及ReduceTask 的前半程,共同组成的。
2,从MapTask中map方法结束,到ReduceTask中的reduce方法开始,这个中间的部分就是Shuffle。是MapReduce的核心,心脏。
shuffle 过程讲解
map端
1,数据开始输出到 这个环形缓冲区,如果缓冲区的内存是100M的话,当数据的内存到百分之八十时,如果内存的数据达到80M,开是溢写到磁盘并对数据进行分区,然后再把多个小文件合并成一个大文件,进行多次合并 ,最终分区的文件只能有一份。
2,在溢写出的文件是排过序的,排序规则:快速排序算法,在排序之前,会根据分区的算法,对数据进行分区,是在内存中进行的,先分区,在每一个分区中再排序,接着溢写到磁盘,分区的排序是 快速排序法,简称快排,到合并小文件成大文件时候也会进行排序,这个排序是归并排序
3,合并的最终溢写文件可以使用压缩技术来达到节省磁盘空间和减少向reduce阶段传输数据的目的。(存储在本地磁盘中)
Reduce端
1,到reduce端 是根据不同的分区去各个服务器拉取相同的数据,电脑怎么知道它拉那个分区呢,是有规定的
2,reduce任务有少量的复制线程,因此能够并行取得map输出。默认是五个线程,所以它能一次性拉取五台服务器的数据
3,如果map上的数据非常小,该数据会被拉取到reduce端的内存中,如果数据量大就拉取到reduce端的硬盘上。
4,拉完之后进行merge 进行合并 到这shuffle 就结束了