shuffle执行过程分为两个核心环节
mapShuffle
reduceShuffle
job提交数据任务,根据客户提交的切片决定maptask的次数,map读取job提交的数据,输出格式为key/value的形式,对键值对进行一个默认的分区,每一个map任务分配一个缓存,缓存默认大小是100m当缓存到达80%时会启动溢写操作,在写入我文件之前对键值对进行分区排序合并,,默认分区是hash函数对key进行哈希在对reduce的数量取模,也可以按照需求自定义分区,默认会对key的一个字典排序,排序结束后有一个可选的合并(combine)的操作,一般在累加最大的值得场景上使用。溢出的文件时分区且区内有序的,最后对所以溢写文件进行一个归并操作。如果磁盘中生生产溢写文件的数量超过min.num.spills.for.combine的值时(默认是3,用户可以修改)就可以再次运行combiner对数据进行合并,从而减小写入磁盘的数据量。map端shuffle过程结束,通知相关的Reduce任务来拉取数据,并把数据放到缓存中,缓存内容达到80%的时候同样执行溢写操作,生产溢写文件,把这些溢