图1
图2
图1 -作业提交阶段:
1、client 提交job,向 ResourceManager【RM】 申请job_id;
2、RM 返回 job_id 及资源提交路径 给 client
3、client 把job所需的资源提交 到 3中指定的路径中
4、client 上传完成资源后,向RM 发送执行作业请求,RM接收到请求后,会创建一个 Application Manager【AM】 来管理这个job
作业初始化阶段:
5、AM 将 job添加到 Resource Scheduler 【RS】中; RS维护了一个队列,所有需要执行的job都会在这个队列中,并按一定的规则等待执行
6、当轮到你的job执行时,RS会通知AM有空闲NameManager【NM】 分配给它来执行job 了
7、AM让分配的NM 开辟 Container, 并在Container中 启动job对应的 Application Master【AMs】
8、AMs获取步骤3中在hdfs上提交的文件,根据分片信息生成 Task 【map/reduce task】
作业分配阶段:
9、AMs向RM申请运行Task的任务资源
10、RM把需要运行的Task分配给空闲的NM,NM分别领取Task并创建用于执行task的Container
任务运行阶段
11、AMs通知所有接受到该Task的NM启动计算
12、NM启动计算
13、如果NM上的该Task执行结束后还有新的Task,则向RM申请新的Container运行新的Task
14、所有Task执行完成即Job完成后,AMs会向RM申请注销自己