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申請注銷自己。