1. 程式人生 > >Hadoop Yarn 原理及運作機制

Hadoop Yarn 原理及運作機制

1.Yarn概述    Yarn是一個資源排程平臺,負責為運算程式提供伺服器運算資源,相當於一個分散式的作業系統平臺,而MapReduce等運算程式則相當於運行於作業系統之上的應用程式。2.YARN模組介紹    YARN是一個資源管理、任務排程的框架,主要包含三大模組:ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)。其中,ResourceManager負責所有資源的監控、分配和管理;ApplicationMaster負責每一個具體應用程式的排程和協調;NodeManager負責每一個節點的維護。對於所有的applications,RM擁有絕對的控制權和對資源的分配權。而每個AM則會和RM協商資源,同時和NodeManager通訊來執行和監控task。幾個模組之間的關係如圖所示。

(1) ResourceManager    ResourceManager負責整個叢集的資源管理和分配,是一個全域性的資源管理系統。    NodeManager以心跳的方式向ResourceManager彙報資源使用情況(目前主要是CPU和記憶體的使用情況)。RM只接受NM的資源回報資訊,對於具體的資源處理則交給NM自己處理。    YARN Scheduler根據application的請求為其分配資源,不負責application job的監控、追蹤、執行狀態反饋、啟動等工作。
(2) NodeManager    NodeManager是每個節點上的資源和工作管理員,它是管理這臺機器的代理,負責該節點程式的執行,以及該節點資源的管理和監控。YARN叢集每個節點都執行一個NodeManager。    NodeManager定時向ResourceManager彙報本節點資源(CPU、記憶體)的使用情況和Container的執行狀態。當ResourceManager宕機時NodeManager自動連線RM備用節點。    NodeManager接收並處理來自ApplicationMaster的Container啟動、停止等各種請求。

(3) ApplicationMaster    使用者提交的每個應用程式均包含一個ApplicationMaster,它可以執行在ResourceManager以外的機器上。    負責與RM排程器協商以獲取資源(用Container表示)。    將得到的任務進一步分配給內部的任務(資源的二次分配)。    與NM通訊以啟動/停止任務。    監控所有任務執行狀態,並在任務執行失敗時重新為任務申請資源以重啟任務。    當前YARN自帶了兩個ApplicationMaster實現,一個是用於演示AM編寫方法的例項程式DistributedShell,它可以申請一定數目的Container以並行執行一個Shell命令或者Shell指令碼;另一個是執行MapReduce應用程式的AM—MRAppMaster。    注:RM只負責監控AM,並在AM執行失敗時候啟動它。RM不負責AM內部任務的容錯,任務的容錯由AM完成。3.YARN執行流程

(1) client向RM提交應用程式,其中包括啟動該應用的ApplicationMaster的必須資訊,例如ApplicationMaster程式、啟動ApplicationMaster的命令、使用者程式等。(2) ResourceManager啟動一個container用於執行ApplicationMaster。(3) 啟動中的ApplicationMaster向ResourceManager註冊自己,啟動成功後與RM保持心跳。(4) ApplicationMaster向ResourceManager傳送請求,申請相應數目的container。(5) ResourceManager返回ApplicationMaster的申請的containers資訊。申請成功的container,由ApplicationMaster進行初始化。container的啟動資訊初始化後,AM與對應的NodeManager通訊,要求NM啟動container。AM與NM保持心跳,從而對NM上執行的任務進行監控和管理。(6) container執行期間,ApplicationMaster對container進行監控。container通過RPC協議向對應的AM彙報自己的進度和狀態等資訊。(7) 應用執行期間,client直接與AM通訊獲取應用的狀態、進度更新等資訊。(8) 應用執行結束後,ApplicationMaster向ResourceManager登出自己,並允許屬於它的container被收回。