上图是官方的mapreduce的图解,下面我们进行执行流程具体分析。
MR执行流程分析:
1. :run job。
客户端提交一个mr的jar包给JobClient(提交方式:./hadoop jar ··· )
2. get new job ID。
JobClient通过RPC和JobTracker进行通信,返回一个存放jar包的地址(HDFS)和jobId.
3. copy jobresources。
client将jar包写入到HDFS当中(path=hdfs上的地址+jobid)
4. submit job。
开始提交任务。(任务的描述信息,不是jar。包括jobID,jar的存放位置,配置信息等等)
5. Initialize job
JobTracker进行初始化任务
6. retrieve
读取HDFS上的要处理的文件,开始计算输入分片,每一个分片对应一个MapperTask
7. heratbeat
TaskTracker通过心跳机制领取任务(任务的信息)
8. retrieve job
下载所需要的jar,配置文件等
9. ChildJVM
TaskTracker启动一个java child子进程,用来执行具体的任务(MapperTask或ReducerTask)
10. run
将结果写入到HDFS当中
执行MR的命令:
hadoop jar <jar在linux的路径> <main方法所在的类的全类名> <参数>