1. Resource Manager,Application Master 和 Node Manager

在Hadoop2中将JobTracker兩個主要的功能分離成單獨的元件,這兩個功能是資源管理(Resource Manager)和任務排程/監控(Application Master)。
新的資料總管全局管理所有應用程式計算資源的配置設定,每一個應用的 ApplicationMaster 負責相應的排程和協調。一個應用程式無非是一個單獨的傳統的 MapReduce 任務或者是一個 DAG( 有向無環圖 ) 任務。
事實上,每一個應用的ApplicationMaster是一個詳細的架構庫,它結合從ResourceManager獲得的資源和 NodeManager 協同工作來運作和監控任務。
在上圖中ResourceManager支援分層級的應用隊列,這些隊列享有叢集一定比例的資源。從某種意義上講它就是一個純粹的排程器,它在執行過程中不對應用進行監控和狀态跟蹤。同樣,它也不能重新開機因應用失敗或者硬體錯誤而運作失敗的任務。
ResourceManager 是基于應用程式對資源的需求進行排程的 ; 每一個應用程式需要不同類型的資源是以就需要不同的容器。資源包括:記憶體,CPU,磁盤,網絡等等。可以看出,這同現 Mapreduce 固定類型的資源使用模型有顯著差別,它給叢集的使用帶來負面的影響。資料總管提供一個排程政策的插件,它負責将叢集資源配置設定給多個隊列和應用程式。排程插件可以基于現有的能力排程和公平排程模型。
在上圖中 NodeManager 是每一台機器架構的代理,是執行應用程式的容器,監控應用程式的資源使用情況 (CPU,記憶體,硬碟,網絡 ) 并且向排程器彙報。
在上圖中,每一個應用的 ApplicationMaster的職責有:向排程器索要适當的資源容器,運作任務,跟蹤應用程式的狀态和監控它們的程序,處理任務的失敗原因。
2. 調用順序呢
(1)用戶端的Map Reduce程式通過hadoop shell送出到hadoop的叢集中
(2)程式會通過RPC通信将打成jar包的程式的有關資訊傳遞給Hadoop叢集中RM(ResourceManager),可稱為領取Job ID的過程
(3)RM将送出上來的任務配置設定一個唯一的ID,同時會将run.jar的在HDFS上的存儲路徑發送給用戶端.
(4)用戶端得到那個存儲路徑之後,會相應的拼接出最終的存放路徑目錄,然後将run.jar分多份存儲在HDFS目錄中,預設情況下備份數量為10份.可配置
(5)用戶端送出一些配置資訊,例如:最終存儲路徑,Job ID等給RM
(6)RM會将這些配置資訊放入一個隊列當中,供排程器調用.至于排程的算法,不必深究
(7)NM(NodeManager)和RM是通過心跳機制保持着通信的,NM會定期的向RM去領取任務
(8)RM會在任意的一台或多台的NM中,啟動任務監控的程序Application Master.用來監控其他NM中YARN Child的執行的情況
(9)NM在領取到任務之後,得到資訊,會去HDFS的下載下傳run.jar.然後在本地的機器上啟動YARN Child程序來執行map或者reduce函數.map函數的處理之後的中間結果資料會放在本地檔案系統中的
(10)在結束程式之後,将結果資料寫會HDFS中
一個Job從送出到執行的過程差不多如上所述。
參考連結
1. http://my.oschina.net/codeWatching/blog/345374#OSC_h2_3
其他
微信公衆号:CodingRush 分享資料挖掘、分布式機器學習、程式設計等相關知識。