作業提交
- Client調用job.waitForCompletion⽅法,向整個集群提交MapReduce作業。
- Client向RM申請一個作業id。
- RM給Client返回該job資源的提交路徑和作業id。
- Client提交jar包、切⽚信息和配置文件到指定的資源提交路徑。
- Client提交完資源后,向RM申請運行MrAppMaster。
作業初始化
- 當RM收到Client的請求后,將該job添加到容量調度器中。
- 某⼀個空閑的NM領取到該Job。
- 該NM創建Container,並產生MRAppmaster。
- 下載Client提交的資源到本地。
任務分配
- MrAppMaster向RM申請運行多個MapTask任務資源。
- RM將運行MapTask任務分配給另外兩個NodeManager,另兩個NodeManager分別領取任務並創建容器。
任務運行
- MrAppMaster向兩個接收到任務的NodeManager發送程序啟動腳本,這兩個NodeManager分別啟動MapTask,MapTask對數據分區排序。
- MrAppMaster等待所有MapTask運行完畢后,向RM申請容器,運行ReduceTask。
- ReduceTask向MapTask獲取相應分區的數據。
- 程序運行完畢后,MrAppMaster會向RM申請注銷⾃己。
進度和狀態更新
YARN中的任務將其進度和狀態返回給應⽤管理器, 客戶端每秒(通過mapreduce.client.progressmonitor.pollinterval設置)向應⽤管理器請求進度更新, 展示給用戶。
作業完成
除了向應用管理器請求作業進度外, 客戶端每5秒都會通過調用waitForCompletion()來檢查作業是否完成。時間間隔可以通過mapreduce.client.completion.pollinterval來設置。作業完成之后, 應用管理器和Container會清理工作狀態。作業的信息會被作業歷史服務器存儲以備之后用戶核查。