生活随笔
收集整理的這篇文章主要介紹了
MapReduce作业提交流程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.作業提交
提交作業 job 后,job.waitForCompletion(true)調用 monitorAndPrintJob()方法每秒輪詢 作業進度,如果發現自上次報告后有改變,便把進度報告給控制臺。Job 的 submit()方法 創建一個內部的 JobSubmitter 實例,并調用其 submitJobInternal 方法(步驟 1)。作業 完成后,如果成功,就顯示計數器;如果失敗,這將導致作業失敗的錯誤記錄到控制臺。
JobSubmitter 所實現的作業提交過程如下所述:
向資 ResourceManager 源管理器請求一個新作業的 ID,用于 MapReduce 作業 ID。作業客戶端檢查作業的輸出說明,計算輸入分片 splits 并將作業資源(包括作業 Jar 包、 配置文件和分片信息)復制到 HDFS通過調用資源管理器上的 submitApplication()方法提交作業
2.作業初始化
資源管理器 ResourceManager 收到調用他的 submitApplication()消息后,便將請求傳 遞給調度器(scheduler)。調度器分配一個容器(Container),然后資源管理器在節點 管理器(NodeManager)的管理下載容器中啟動應用程序的 master 進程(步驟 5a 和 5b)MapReduce 作業的 application master 是一個 Java 應用程序,它的主類是 MRAppMaster。 它對作業進行初始化:通過創建多個簿記對象以保持對作業進度的跟蹤,因為它將接受 來自任務的進度和完成報告(步驟 6)。接下來,它接受來自共享文件系統的在客戶端計算的輸入分片(步驟 7)。對每一個分 片創建一個 map 任務對象以及由 mapreduce. job.reduces 屬性確定的具體數量的 reduce 任務對象。
3.任務分配
AppMaster 為該作業中的所有 map 任務和 reduce 任務向資源管理器請求容器。
4.任務執行
一旦資源管理器的調度器為任務分配了容器,AppMaster 就通過與節點管理器 NodeManager 通訊來啟動容器(步驟 9a 和 9b)。該任務由主類為 YarnChild 的 Java 應用程序執行。在它允許任務之前,首先將任務需要 的資源本地化,包括作業的配置、JAR 文件和所有來自分布式緩存的文件.最后運行 map 任務或 reduce 任務。
5.進度和狀態更新
在 YARN 下運行時,任務每 3 秒鐘通過 umbilical 接口向 APPMaster 匯報進度和狀態。客戶端每一秒鐘(通過 mapreduce.client. Progressmonitor.pollinterval 設置)查詢一次 AppMaster 以接收進度更新,通常 都會向用戶顯示。
6.作業完成
除了向 AppMaster 查詢進度外,客戶端每 5 秒還通過調用 Job 的 waitForCompletion() 來 檢 測 作 業 是 否 完 成 。 查 詢 的 間 隔 可 以 通 過 mapreduce.client.completion.pollinterval 屬 性 進 行 設 置 。 作 業 完 成 后 , AppMaster 和任務容器清理器工作狀態
總結
以上是生活随笔為你收集整理的MapReduce作业提交流程的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。