maprudece的shuffle机制

在这里插入图片描述

Maprudece的Shuffle机制

1.shuffle:map的输出作为reduce的输入的中间的过程
2.shuffle的阶段
1)由map()方法将key/vaule写到环形缓冲区当中
2)环形缓冲区默认为100MB,若达到阈值(80%)就会发生溢写,产生临时文件(将80MB的文件溢写,并且不影响向缓冲区写入数据的过程,这个过程是启动了单独的一个线程来做,如果map输出的数据量大,溢写可能会发生多次,最后,环形缓冲区里的数据会合并成一个文件进行溢写的操作)
3)溢写的文件经过默认的分区(partitioner)和排序(sort)
4)Combiner:区内合并,这里的合并是可选的,是对程序的一个优化,减少了磁盘IO的消耗
5)merge:归并,区与区合并,将相同分区的合并。
6)reducetask先通过内存缓冲的方式先copy部分属于自己的数据,当超过阈值时,溢出到
磁盘.
7)不管在内存还是磁盘,都要再一次的进行归并排序
8)按照相同的key进行分组
9)传给reduce()方法

分区排序Combiner分组都可以根据自身业务需求进行自定义,reducetaske的数量由分区决定,默认的分区数量为1,可以通过自定义来修改数量,在job里设置就可以。