MapReduce——MR的执行流程(五次IO)
一个完整的mapreduce程序在分布式运行时有三类实例进程:
-
MRAppMaster:负责整个程序的过程调度及状态协调
-
mapTask:负责map阶段的整个数据处理流程
(maptask的数量是不能设置的,reducetask可以自己设置job.setNumReduceTasks(5);)
-
ReduceTask:负责reduce阶段的整个数据处理流程
对于MR的执行流程,我是通过其过程中的五次IO来记忆的,详细解释如下(最后有流程详图):
第一次io
1、在一个MR程序的启动的时候,最先启动的是MRAppMaster,MRAppMaster启动后根据本次job作业的描述信息,计算出需要的map task的实际数量,紧接着向集群申请服务器启动相应数量的map task进程。
1.1(读文件流程)从map task进程开始读取文件,是通过调用客户端指定的FileInputFormat(默认是TextInputFormat)生成一个RecordReader对象,调用RecordReader中的read()方法,然后它会,按行读取block块里面的内容(一次读一行)。
maptask会调用nextkeyvalue()方法,通过getCurrentKey,getCurrentValue得到k,v的键值对数据,返回(key,value)。
1.2(切片流程)通过调用getSplit