工作机制

- Read阶段:MapTask通过RecordReader解析输入InputSplit中的key/value。
- Map阶段:用户编写的map()函数处理key/value,生成新的key/value。
- Collect阶段:map()函数处理完成后,调用OutputCollector.collect()输出结果,生成的key/value被分区并写入环形内存缓冲区。
-
Spill阶段:环形缓冲区满后,数据经过排序和可能的合并、压缩后写入本地磁盘的临时文件。此阶段包括:
- 利用快速排序算法对数据进行排序,先按分区编号Partition排序,再按key排序。
- 按分区编号将数据写入临时文件output/spillN.out。
- 将分区数据的元信息写入内存索引数据结构SpillRecord。
- Merge阶段:所有数据处理完成后,MapTask将所有临时文件合并成一个大文件,保存到文件output/file.out中,并生成相应的索引文件output/file.out.index。