Yarn通訊協議與工作流程
阿新 • • 發佈:2019-02-18
一. Yarn通訊協議
在 YARN 中,任何兩個需相互通訊的元件之間僅有一個 RPC 協議,而對於任何一個 RPC 協議,通訊雙方有一端是 Client,另一端為 Server,且 Client 總是主動連線 Server 的,因此,YARN 實際上採用的是拉式(pull-based)通訊模型。如圖所示,箭頭指向的元件是 RPC Server,而箭頭尾部的元件是 RPC Client,YARN 主要由以下幾個 RPC 協議組成 :- JobClient(作業提交客戶端)與 RM 之間的協議—ApplicationClientProtocol
:JobClient 通過該 RPC 協議提交應用程式、查詢應用程式狀態等。
- Admin(管理員)與RM 之間的通訊協議—ResourceManagerAdministrationProtocol :Admin 通過該 RPC 協議更新系統配置檔案,比如節點黑白名單、使用者佇列許可權等。
- AM與RM之間的協議—ApplicationMasterProtocol :AM 通過該 RPC 協議向 RM註冊和撤銷自己,併為各個任務申請資源。
- AM與NM之間的協議—ContainerManagementProtocol :AM 通過該 RPC 要求NM 啟動或者停止 Container,獲取各個 Container 的使用狀態等資訊。
- NM與RM之間的協議—ResourceTracker
二. Yarn工作流程
當用戶向 YARN 中提交一個應用程式後,YARN 將分兩個階段執行該應用程式 :第一個階段是啟動 ApplicationMaster ;第二個階段是由 ApplicationMaster 建立應用程式,為它申請資源,並監控它的整個執行過程,直到執行完成。如圖 2-11 所示,YARN 的工作流程分為以下幾個步驟:- 步驟 1 使用者向 YARN 中提交應用程式,其中包括 ApplicationMaster 程式、啟動ApplicationMaster 的命令、使用者程式等。
- 步驟 2 ResourceManager 為該應用程式分配第一個 Container,並與對應的 Node-Manager 通訊,要求它在這個 Container 中啟動應用程式的 ApplicationMaster。
- 步驟 3 ApplicationMaster 首先向 ResourceManager 註冊,這樣使用者可以直接通過ResourceManage 檢視應用程式的執行狀態,然後它將為各個任務申請資源,並監控它的執行狀態,直到執行結束,即重複步驟 4~7。
- 步驟 4 ApplicationMaster 採用輪詢的方式通過 RPC 協議向 ResourceManager 申請和領取資源。
- 步驟 5 一旦 ApplicationMaster 申請到資源後,便與對應的 NodeManager 通訊,要求它啟動任務。
- 步驟 6 NodeManager 為任務設定好執行環境(包括環境變數、JAR 包、二進位制程式等)後,將任務啟動命令寫到一個指令碼中,並通過執行該指令碼啟動任務。
- 步驟 7 各個任務通過某個 RPC 協議向 ApplicationMaster 彙報自己的狀態和進度,以讓 ApplicationMaster 隨時掌握各個任務的執行狀態,從而可以在任務失敗時重新啟動任務。在應用程式執行過程中,使用者可隨時通過 RPC 向 ApplicationMaster 查詢應用程式的當前執行狀態。
- 步驟 8 應用程式執行完成後,ApplicationMaster 向 ResourceManager 登出並關閉自己。