1、MapReduce 运行流程
(1)、JobClient 调用 submitJob(),提交Job
(2)、
JobClient 向 JobTracker 请求一个新的JobId(调用
JobTracker.getNewJobId()
)
(3)、
JobClient检查作业的输出说明,计算作业的输入分片,将运行作业所需要的资源 (Jar、配置文件、输入分片)复制到 HDFS中。
(4)、
JobClient告知
JobTracker , Job 准备执行 (
调用
JobTracker.submitJob()
)
(5)、
JobTracker将对
submitJob()的调用 放入内部队列中,交给作业调度器 JobScheduler,并初始化
(6)、
作业调度器 Job Scheduler 从 HDFS中获取 JobClient 已经计算好的输入分片,为每一个分片创建一个Map Task
,以根据配置创建Reduce
Task
(7)、TaskTracker 发送心跳 heartbeat, 获得 Task
(8)、
TaskTracker 将 Task 所需的Jar复制到本地,将应用程序从分布式缓存复制到本地。
TaskTracker 为Task 新建一个本地目录,将JAR解压到此。
TaskTracker 新建 TaskRunner。
(9)、
TaskRunner 启动一个新的 JVM ,运行每个Task。
(10)、
TaskTracker与
JobTracker 通过 umbilical接口通信,每隔几秒告知其进度。