shuffle是一个过程,真正的体现是一个线程,实现从map端通过网络拷贝数据到reduce端进行计算。
执行流程:
map端:
- 任务执行时会将K1,V1转换成K2,V2,存储到内存缓冲区buffer in memory,内存缓冲区默认大小为100M。
- 当数据写到缓冲区80%时到达阈值,此时将数据一起写到磁盘。
- map操作结束后,缓冲区再次刷新一次,将数据写入磁盘。
- map阶段对数据进行了分区,所以存入磁盘的临时数据也有分区。
- 对临时文件在磁盘进行合并,合并成一个大文件。
- 一个map只会产生一个文件。合并完成的文件也是有分区的。
- 每个分区分别对应一个reduce,分别拷贝到reduce中。
reduce端:
- 不同map拷贝过来的数据进行合并,执行reduce操作。
- 执行结果存到hdfs中。