shuffle:map阶段的数据传递到reduce阶段,这个流程叫做shuffle
- 程序执行,首先启动mrAppMaster(mr)
- mr根据job信息,启动相应数量的mapTask进程
分片大小默认等于block(块)大小,块大小默认128M。
分片大小可以通过FileInputFormat的getSplit方法修改。
一个分片启动一个mapTask。
注意多个文件不能分到同一个分片。
- 每个mapTask,读取文件内容(默认TextInputFormat),每读取一次(一个kv对)调用一次map方法
- map方法对数据进行逻辑处理
- 输出结果(kv对)放到缓存区
缓存区是一个环形缓冲区,默认大小100M。预留20%空间用来进行分区排序
- 缓存区分区排序(快排)后,溢出到磁盘文件。
至少进行一次溢出
- 磁盘文件进行局部聚合(combiner),利用归并排序
- mr根据job信息启动相应数量的reduceTask
- reduceTask去每个mapTask上拉取属于自己的分区内容
- 根据分组方法(默认key相同为一组),将拉去的内容合并(归并排序)
- 每组调用一次reduce方法
- 输出(默认TextOutputFormat)结果到指定文件