霞给的烈酒,给的温柔,最后的最后,不过是一场梦~
shuffle的定义简单来说可以是洗牌,可以理解为一种让数据重新分布以使得某些数据被放在同一分区里的一种机制。Shuffle的过程中,存在着大量的网络消耗传输数据,会在磁盘上产生大量的中间文件。
在MapReduce中的shuffle分为map端与reducer端,以下是对shuffle的一些详述:
Map端的Shuffle
Map的输出结果首先被缓存到内存,当缓存区(环状缓冲区)达到80% (默认大小为100MB),就会启动溢写操作,当前启动溢写操作时,首先把缓存中的数据进行分区,对每个分区的数据进行排序和合并。之后再写入到磁盘中,每次溢写 都会生成新的磁盘文件,随着Job执行,被溢写出到磁盘的文件会越来越多,在Map任务全部结束之前,这些溢写文件会被归并成一个大的磁盘文件,然后通知相应的Reduce任务来领取属于自己的数据
小结:
- map输入结果写入缓冲区
- 缓冲区达到阈值(触发溢写的百分比),溢写到