第一部分:shuffle的功能:
- 分区:决定当前key交由哪个reduce处理,默认按照key的hash值对reduce个数取余
- 分组:将相同的key进行合并
- 排序:按照key对每一组keyvalue进行排序(字典顺序)
第二部分:执行过程:
- map端shuffle
1.分区:对每一条keyvalue进行分区(打标签)
2.排序:将相同分区的数据进行分区内排序
3.当整个环形缓冲区达到阈值80%,开始溢写
spill溢写:每一个map处理之后结果进入环形缓冲区(内存100M),将当分区排序之后的数据写入磁盘中,变成file文件,最终生成多个小文件
4.merge:合并,将spill生成的多个小文件进行合并 - reduce端shuffle
1.reduce启动多个线程,通过网络到每台机器上拉取属于自己分区的数据
2.merge合并:将每个Map task的结果中拉取的数据进行合并,并且进行排序(排序是对属于我的分区进行排序)
3.分组:对相同key的value进行合并