YARN架構簡介

Apache Hadoop YARN (Yet Another Resource Negotiator,另外一種資源協調者)是一種新的 Hadoop 資源管理器。node

它的基本設計思想是將MRv1中的JobTracker拆分紅了兩個獨立的服務:一個全局的資源管理器ResourceManager和每一個應用程序特有的ApplicationMaster。其中ResourceManager負責整個系統的資源管理和分配,而ApplicationMaster負責單個應用程序的管理。
網絡




YARN 分層結構的本質是 ResourceManager。這個實體控制整個集羣並管理應用程序向基礎計算資源的分配。ResourceManager 將各個資源部分(計算、內存、帶寬等)精心安排給基礎 NodeManager(YARN 的每節點代理)。ResourceManager 還與 ApplicationMaster 一塊兒分配資源,與 NodeManager 一塊兒啓動和監視它們的基礎應用程序。在此上下文中,ApplicationMaster 承擔了之前的 TaskTracker 的一些角色,ResourceManager 承擔了 JobTracker 的角色。架構


ApplicationMaster 管理一個在 YARN 內運行的應用程序的每一個實例。ApplicationMaster 負責協調來自 ResourceManager 的資源,與NM通訊以啓動/中止任務,並經過 NodeManager 監視容器的執行和資源使用(CPU、內存等的資源分配)。框架


NodeManager 管理一個 YARN 集羣中的每一個節點。NodeManager 提供針對集羣中每一個節點的服務,從監督對一個容器的終生管理到監視資源和跟蹤節點健康。另外一方面,它接收並處理來自AM的Container啓動/中止等各類請求。oop


Container:Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM爲AM返回的資源即是用Container表示。YARN會爲每一個任務分配一個Container,且該任務只能使用該Container中描述的資源。
spa


 YARN整體上仍然是master/slave結構,在整個資源管理框架中,resourcemanager爲master,nodemanager是slave。Resourcemanager負責對各個nademanger上資源進行統一管理和調度。當用戶提交一個應用程序時,須要提供一個用以跟蹤和管理這個程序的ApplicationMaster,它負責向ResourceManager申請資源,並要求NodeManger啓動能夠佔用必定資源的任務。因爲不一樣的ApplicationMaster被分佈到不一樣的節點上,所以它們之間不會相互影響。設計

應用程序的提交過程代理

在 ResourceManager 接受一個新應用程序提交時,Scheduler 制定的第一個決策是選擇將用來運行 ApplicationMaster 的容器。在 ApplicationMaster 啓動後,它將負責此應用程序的整個生命週期 首先也是最重要的是,它將資源請求發送到 ResourceManager,請求運行應用程序的任務所需的容器。資源請求是對一些容器的請求,用以知足一些資源需求。blog

若是可能的話,ResourceManager 會分配一個知足 ApplicationMaster 在資源請求中所請求的需求的容器(表達爲容器 ID 和主機名)。該容器容許應用程序使用特定主機上給定的資源量。分配一個容器後,ApplicationMaster 會要求 NodeManager(管理分配容器的主機)使用這些資源來啓動一個特定於應用程序的任務。此任務能夠是在任何框架中編寫的任何進程(好比一個 MapReduce 任務或一個 Giraph 任務)。NodeManager 不會監視任務;它僅監視容器中的資源使用狀況,舉例而言,若是一個容器消耗的內存比最初分配的更多,它會結束該容器。
生命週期

ApplicationMaster 會不遺餘力協調容器,啓動全部須要的任務來完成它的應用程序。它還監視應用程序及其任務的進度,在新請求的容器中從新啓動失敗的任務,以及向提交應用程序的客戶端報告進度。應用程序完成後,ApplicationMaster 會關閉本身並釋放本身的容器。

儘管 ResourceManager 不會對應用程序內的任務執行任何監視,但它會檢查 ApplicationMaster 的健康情況。若是 ApplicationMaster 失敗,ResourceManager 可在一個新容器中從新啓動它。能夠認爲 ResourceManager 負責管理 ApplicationMaster,而 ApplicationMasters 負責管理任務。


所以能夠總結,相比傳統的MapReduce,YARN提供了更強大的可伸縮性和靈活性。對原有的架構進行了去中心化的處理,將資源管理和任務協調分爲兩個不一樣的進程來處理。

相關文章
相關標籤/搜索