mapreducer的运行机制

mapreducer的运行机制

map阶段

1 通过读取数据组件 InputFormat (默认 TextInputFormat) 将文件进行逻辑切片,然后启动对应切片个数的maptask任务
2 通过recordread读取数据,返回<key1,value1>的键值对
3 进入自定义的mapper类中,调用map函数,读取一行记录就会调用一次,输出处理后的键值对;

map的shuffle阶段

4 Mapper 逻辑结束之后, 将 Mapper 的每条结果通过 context.write 进行collect数据收集. 在 collect 中, 会先对其进行分区处理,默认使用 HashPartitioner
5 接下来会将数据写入到环形缓冲区,(缓冲区的作用是批量收集 Mapper 结果, 减少磁盘 IO 的影响. ),当数据过大时会出现溢写,溢写的过程中对数据进行排序和规约,然后生成一个个小文件,小文件进行合并(meger),再经过排序生成一个带分区索引的中间文件

reduce的shuffle阶段

6)reduce的缓冲区会拉取对应的分区数据,数据进入缓存区,经过溢写生成小文件,小文件进行合并,然后排序和分组,生成一个临时文件,
7)reducetask对中间文件进行处理,然后输出

mapreducer的运行机制