YARN 執行機制
1. YARN 整體架構
YARN 框架是 hadoop 的資源管理器,在介紹它的執行機制之前,我們先了解一下 YARN 中幾個基礎元件:Resource Manager、Node Manager、Container 以及 AppMaster。
ResourceManager:ResourceManager 在整個叢集中就只有一個,其主要負責和客戶端進行通訊,為每個節點進行資源的排程以及分配,與 AppMaster 一起進行資源的分配。
NodeManager:YARN 中每個節點都存在一個 NodeManager,其主要對容器中的資源進行監控,處理來自 AppMaster 和 ResourceManager 的命令。
AppMaster: ApplicationMaster 管理在 YARN 中執行的每個應用程式例項。還負責協調來自 ResourceManager 的資源,並通過 NodeManager 監視容器的執行和資源的使用(CPU、記憶體等的資源分配)。
Container:Container 是 YARN 中的資源抽象,它包含了很多緯度,如記憶體、CPU、網路等。Resource Manager 為 AppMaster 返回的資源便是用Container 表示的。YARN 會為每個任務分配一個 Container,且該任務只能使用該Container中描述的資源。
YARN 的架構圖如下:
2. YARN 執行機制
瞭解了 YARN 的整體架構之後,我們再來看看 YARN 的執行機制,先用一張圖表示 YARN 的執行機制,稍後再對其中的步驟一一進行說明:
我們在這樣的場景下討論 YARN 的執行機制:當寫了一個 MapReduce 程式時,利用 hadoop jar 命令提交給 hadoop,在提交的 jar 包中會包含一個 main 方法,main 中的 job.waitforcompletion 程式碼會啟動 RunJar 的程序,YARN 的資源排程是通過 RunJar 程序來完成。
2.1 作業提交
RunJar 程序會向叢集提交 job,Resource Manager 會為本次 job 提供一個 jobID,還會返回本次作業提交的資源路徑 staging-dir。接著,客戶端將資源(包括Jar包, 配置檔案,)提交到 HDFS 中,最後,通過呼叫 ResourceManager 的 submitApplication 方法來提交作業。
2.2 作業初始化
提交完成之後,ResourceManager 會將本次作業新增到一個任務佇列中,然後將這些任務分配給各個 NodeManager 中,並且為每個 NodeManager 建立一個的資源容器。建立完成之後,ResourceManager 會在容器內啟動 AppMaster 程序,啟動完成之後在 ResourceManager 中進行註冊,這樣就保持了 ResourceManager 和 AppMaster 的通訊。
2.3 任務分配
由建立的 AppMaster 去分配在哪些 NameNode 上執行 map 和 reduce 程式,執行 map 和 reduce 的程式會從 HDFS 中獲取相關的資源再執行 map 和 reduce 程式,這個程序為 YarnChild。任務完成之後,AppMaster 向 ResourceManager 登出自己,ResourceManager 會回收相關的資源。
以上便時 YARN 執行時的整體流程。