YARN基本框架介紹
轉載請註明出處:http://www.cnblogs.com/BYRans/
html
在以前的博客《YARN與MRv1的對比》中介紹了YARN對Hadoop 1.0的完善。本文將重點介紹下YARN各個模塊的做用與YARN運行流程。node
YARN模塊介紹
概述
YARN是一個資源管理、任務調度的框架,主要包含三大模塊:ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)。其中,ResourceManager負責全部資源的監控、分配和管理;ApplicationMaster負責每個具體應用程序的調度和協調;NodeManager負責每個節點的維護。對於全部的applications,RM擁有絕對的控制權和對資源的分配權。而每一個AM則會和RM協商資源,同時和NodeManager通訊來執行和監控task。幾個模塊之間的關係如圖所示。
app
ResourceManager
- ResourceManager負責整個集羣的資源管理和分配,是一個全局的資源管理系統。
- NodeManager以心跳的方式向ResourceManager彙報資源使用狀況(目前主要是CPU和內存的使用狀況)。RM只接受NM的資源回報信息,對於具體的資源處理則交給NM本身處理。
- YARN Scheduler根據application的請求爲其分配資源,不負責application job的監控、追蹤、運行狀態反饋、啓動等工做。
NodeManager
- NodeManager是每一個節點上的資源和任務管理器,它是管理這臺機器的代理,負責該節點程序的運行,以及該節點資源的管理和監控。YARN集羣每一個節點都運行一個NodeManager。
- NodeManager定時向ResourceManager彙報本節點資源(CPU、內存)的使用狀況和Container的運行狀態。當ResourceManager宕機時NodeManager自動鏈接RM備用節點。
- NodeManager接收並處理來自ApplicationMaster的Container啓動、中止等各類請求。
ApplicationMaster
- 用戶提交的每一個應用程序均包含一個ApplicationMaster,它能夠運行在ResourceManager之外的機器上。
- 負責與RM調度器協商以獲取資源(用Container表示)。
- 將獲得的任務進一步分配給內部的任務(資源的二次分配)。
- 與NM通訊以啓動/中止任務。
- 監控全部任務運行狀態,並在任務運行失敗時從新爲任務申請資源以重啓任務。
- 當前YARN自帶了兩個ApplicationMaster實現,一個是用於演示AM編寫方法的實例程序DistributedShell,它能夠申請必定數目的Container以並行運行一個Shell命令或者Shell腳本;另外一個是運行MapReduce應用程序的AM—MRAppMaster。
- 注:RM只負責監控AM,並在AM運行失敗時候啓動它。RM不負責AM內部任務的容錯,任務的容錯由AM完成。
YARN運行流程
- client向RM提交應用程序,其中包括啓動該應用的ApplicationMaster的必須信息,例如ApplicationMaster程序、啓動ApplicationMaster的命令、用戶程序等。
- ResourceManager啓動一個container用於運行ApplicationMaster。
- 啓動中的ApplicationMaster向ResourceManager註冊本身,啓動成功後與RM保持心跳。
- ApplicationMaster向ResourceManager發送請求,申請相應數目的container。
- ResourceManager返回ApplicationMaster的申請的containers信息。申請成功的container,由ApplicationMaster進行初始化。container的啓動信息初始化後,AM與對應的NodeManager通訊,要求NM啓動container。AM與NM保持心跳,從而對NM上運行的任務進行監控和管理。
- container運行期間,ApplicationMaster對container進行監控。container經過RPC協議向對應的AM彙報本身的進度和狀態等信息。
- 應用運行期間,client直接與AM通訊獲取應用的狀態、進度更新等信息。
- 應用運行結束後,ApplicationMaster向ResourceManager註銷本身,並容許屬於它的container被收回。