YARN 集羣也分爲Master/Slave架構,主要由ResourceManager,NodeManager, ApplicationMaster,Container等組成。
-
ResourceManager 全局資源管理器,負責整個系統的資源管理分配和任務調度。ResourceManager包含Scheduler調度器和應用程序管理器Application mananger。調度器只是負責資源的分配,資源分配的單位是container,應用程序管理器負責管理整個系統中所有應用程序,包括應用程序提交、與調度器協商資源以啓動ApplicationMaster、監控ApplicationMaster運行狀態並在失敗時重新啓動它等。
-
NodeManager是每個節點上的資源和任務管理器,它會向ResourceManager定時彙報本節點的資源使用情況和各個Container的運行狀態,同時會接受處理來自ApplicationMaster的對Container的啓動/停止請求。NodeManager不會監視具體的任務,他僅監視Container的使用情況。
-
Task是應用程序的具體任務。例如map任務,reduce任務等
-
Container是Yarn中的資源的具體分配單位,封裝了CPU和內存資源的容器,相當於是一個Task的運行環境的具體抽象。從實現上看,Container是一個抽象類,裏面定義資源信息。在NodeManager節點上擁有許多動態創建的Container。NodeManager會將計算機的CPU和內存的一定值抽離成虛擬值,然後這些虛擬值根據配置組成多個Container,當應用提出申請的時候,會分配相應的Container。
應用程序運行的Container也分爲兩類,一類是運行的ApplicationMaster的Container,一類是運行Task的Container。前者是由ResourceManager向內部的調度器申請和啓動,後者是又ApplicationMaster向ResourceManager申請,並由ApplicationMaster請求NodeManager啓動 -
ApplicationMaster應用內程序管理者。它向ResourceManager申請資源,CPU內存等,並將資源分配給task。一個應用程序對應一個applicationMaster。在用戶提交一個應用程序的時候,會啓動一個ApplicationMaster實例,ApplicationMaster會啓動所需要的的Task,並監控task的運行狀態,進度等。應用程序執行完之後,ApplicationMaster會關閉自己並釋放Container。
MapReduce的處理過程:
- 提交MapReduce程序到ResourceManager
- ResourceManager分配container,並要求NodeManager啓動APPMaster。 AppMaster負責此應用程序的整個生命週期。
- AppMaster向ResourceManager註冊(註冊成功後,可以通過ResourceManager查看應用程序運行的狀態)。AppMaster請求各個應用程序所需要的container
- AppMaster請求NodeManager使用這些Container運行task。
- 各個Task通過RPC協議向AppMaster彙報自己的運行狀態和進度,如果task運行失敗,AppMaster可以要求重新啓動。當所有的task完成,AppMaster向ResourceManager註銷自己。
歡迎關注我的微信公衆號: 北風中獨行的蝸牛