1. MR程序創(chuàng)建成功后,需要提交到HDFS上運(yùn)行,MR程序提交到客戶端所在的節(jié)點(diǎn)。
2. YarnRunner向ResourceManager申請(qǐng)?zhí)峤灰粋€(gè)Application。
3. ResourceManager返回應(yīng)用程序需要提交的資源路徑和ApplicationId。
4. YarnRunner提交資源到HDFS上,包含Job.xml、Job.split、xx.jar,資源提交完畢之后,向ResourceManager申請(qǐng)一個(gè)運(yùn)行MRApplicationMaster,一個(gè)Application對(duì)應(yīng)一個(gè)ApplicationMaster。
5. ResourceManager把提交的Job初始化成一個(gè)Task,放入Yarn的調(diào)度隊(duì)列中去。
6. 當(dāng)執(zhí)行到此Task時(shí),其中一臺(tái)NodeManager領(lǐng)取此任務(wù),然后在此NodeManager上創(chuàng)建一個(gè)Container并創(chuàng)建一個(gè)MRApplicationMaster,然后下載HDFS上的計(jì)算資源(Job.xml、Job.split、xx.jar)到此NodeManager上。
7. MRApplicationMaster向ResourceManager申請(qǐng)運(yùn)行MapTask的資源,同時(shí)ResourceManager向另外兩臺(tái)NodeManager分配執(zhí)行MapTask的任務(wù),這兩臺(tái)NodeManager分別創(chuàng)建Container,然后MRApplicationMaster將啟動(dòng)腳本發(fā)送給這兩臺(tái)NodeManager,啟動(dòng)MapTask任務(wù)。
8. 當(dāng)MapTask執(zhí)行完畢之后,MRApplicationMaster向ResourceManager申請(qǐng)執(zhí)行ReduceTask的資源,ResourceManager分配資源創(chuàng)建Container,Container下載xx.jar到此Container中,MRApplicationMaster啟動(dòng)此任務(wù)。
9. ReduceTask獲取MapTask分區(qū)數(shù)據(jù),進(jìn)行計(jì)算。
10. 當(dāng)ReduceTask運(yùn)行完畢之后,通知MRApplicationMaster,注銷ReduceTask的資源,MRApplicationMaster向ResourceManager申請(qǐng)注銷自己。