1. MR程序创建成功后,需要提交到HDFS上运行,MR程序提交到客户端所在的节点。
2. YarnRunner向ResourceManager申请提交一个Application。
3. ResourceManager返回应用程序需要提交的资源路径和ApplicationId。
4. YarnRunner提交资源到HDFS上,包含Job.xml、Job.split、xx.jar,资源提交完毕之后,向ResourceManager申请一个运行MRApplicationMaster,一个Application对应一个ApplicationMaster。
5. ResourceManager把提交的Job初始化成一个Task,放入Yarn的调度队列中去。
6. 当执行到此Task时,其中一台NodeManager领取此任务,然后在此NodeManager上创建一个Container并创建一个MRApplicationMaster,然后下载HDFS上的计算资源(Job.xml、Job.split、xx.jar)到此NodeManager上。
7. MRApplicationMaster向ResourceManager申请运行MapTask的资源,同时ResourceManager向另外两台NodeManager分配执行MapTask的任务,这两台NodeManager分别创建Container,然后MRApplicationMaster将启动脚本发送给这两台NodeManager,启动MapTask任务。
8. 当MapTask执行完毕之后,MRApplicationMaster向ResourceManager申请执行ReduceTask的资源,ResourceManager分配资源创建Container,Container下载xx.jar到此Container中,MRApplicationMaster启动此任务。
9. ReduceTask获取MapTask分区数据,进行计算。
10. 当ReduceTask运行完毕之后,通知MRApplicationMaster,注销ReduceTask的资源,MRApplicationMaster向ResourceManager申请注销自己。