1. 程式人生 > >Yarn通訊協議與工作流程

Yarn通訊協議與工作流程

一. 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
    :NM 通過該 RPC 協議向 RM 註冊,並定時傳送心跳資訊彙報當前節點的資源使用情況和 Container 執行情況。

二. 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 登出並關閉自己