YARN架構設計詳解

轉載大神文章:YARN架構設計詳解


一、YARN基本服務組件

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

wps56E5.tmp

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

            YARN的基本組成結構,YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等幾個組件構成。

            ResourceManager是Master上一個獨立運行的進程,負責集羣統一的資源管理、調度、分配等等;NodeManager是Slave上一個獨立運行的進程,負責上報節點的狀態;App Master和Container是運行在Slave上的組件,Container是yarn中分配資源的一個單位,包涵內存、CPU等等資源,yarn以Container爲單位分配資源。

            Client向ResourceManager提交的每一個應用程序都必須有一個Application Master,它經過ResourceManager分配資源後,運行於某一個Slave節點的Container中,具體做事情的Task,同樣也運行與某一個Slave節點的Container中。RM,NM,AM乃至普通的Container之間的通信,都是用RPC機制。

            YARN的架構設計使其越來越像是一個雲操作系統,數據處理操作系統。

wps56F6.tmp

1、Resourcemanager

             RM是一個全局的資源管理器,集羣只有一個,負責整個系統的資源管理和分配,包括處理客戶端請求、啓動/監控APP master、監控nodemanager、資源的分配與調度。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(Applications Manager,ASM)。

(1) 調度器

          調度器根據容量、隊列等限制條件(如每個隊列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在運行的應用程序。需要注意的是,該調度器是一個“純調度器”,它不再從事任何與具體應用程序相關的工作,比如不負責監控或者跟蹤應用的執行狀態等,也不負責重新啓動因應用執行失敗或者硬件故障而產生的失敗任務,這些均交由應用程序相關的ApplicationMaster完成。調度器僅根據各個應用程序的資源需求進行資源分配,而資源分配單位用一個抽象概念“資源容器”(Resource Container,簡稱Container)表示,Container是一個動態資源分配單位,它將內存、CPU、磁盤、網絡等資源封裝在一起,從而限定每個任務使用的資源量。此外,該調度器是一個可插拔的組件,用戶可根據自己的需要設計新的調度器,YARN提供了多種直接可用的調度器,比如Fair Scheduler和Capacity Scheduler等。

(2) 應用程序管理器

            應用程序管理器負責管理整個系統中所有應用程序,包括應用程序提交、與調度器協商資源以啓動ApplicationMaster、監控ApplicationMaster運行狀態並在失敗時重新啓動它等。

2. ApplicationMaster(AM)

       管理YARN內運行的應用程序的每個實例。

功能:

      數據切分

     爲應用程序申請資源並進一步分配給內部任務。

     任務監控與容錯

負責協調來自resourcemanager的資源,並通過nodemanager監視容易的執行和資源使用情況。

3. NodeManager(NM)

Nodemanager整個集羣有多個,負責每個節點上的資源和使用。

功能:

       單個節點上的資源管理和任務。

       處理來自於resourcemanager的命令。

       處理來自域app master的命令。

Nodemanager管理着抽象容器,這些抽象容器代表着一些特定程序使用針對每個節點的資源。

Nodemanager定時地向RM彙報本節點上的資源使用情況和各個Container的運行狀態(cpu和內存等資源)

4.Container 
          Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM爲AM返回的資源便是用Container表示的。YARN會爲每個任務分配一個Container,且該任務只能使用該Container中描述的資源。需要注意的是,Container不同於MRv1中的slot,它是一個動態資源劃分單位,是根據應用程序的需求動態生成的。目前爲止,YARN僅支持CPU和內存兩種資源,且使用了輕量級資源隔離機制Cgroups進行資源隔離。

功能:

         對task環境的抽象

        描述一系列信息

        任務運行資源的集合(cpu、內存、io等)

        任務運行環境

二、YARN的資源管理

1、資源調度和隔離是yarn作爲一個資源管理系統,最重要且最基礎的兩個功能。資源調度由resourcemanager完成,而資源隔離由各個nodemanager實現。

2、Resourcemanager將某個nodemanager上資源分配給任務(這就是所謂的“資源調度”)後,nodemanager需按照要求爲任務提供相應的資源,甚至保證這些資源應具有獨佔性,爲任務運行提供基礎和保證,這就是所謂的資源隔離。

3、當談及到資源時,我們通常指內存、cpu、io三種資源。Hadoop yarn目前爲止僅支持cpu和內存兩種資源管理和調度。

4、內存資源多少決定任務的生死,如果內存不夠,任務可能運行失敗;相比之下,cpu資源則不同,它只會決定任務的快慢,不會對任務的生死產生影響。

Yarn的內存管理:

yarn允許用戶配置每個節點上可用的物理內存資源,注意,這裏是“可用的”,因爲一個節點上內存會被若干個服務貢享,比如一部分給了yarn,一部分給了hdfs,一部分給了hbase等,yarn配置的只是自己可用的,配置參數如下:

yarn.nodemanager.resource.memory-mb

表示該節點上yarn可以使用的物理內存總量,默認是8192m,注意,如果你的節點內存資源不夠8g,則需要調減這個值,yarn不會智能的探測節點物理內存總量。

yarn.nodemanager.vmem-pmem-ratio

任務使用1m物理內存最多可以使用虛擬內存量,默認是2.1

yarn.nodemanager.pmem-check-enabled

是否啓用一個線程檢查每個任務證使用的物理內存量,如果任務超出了分配值,則直接將其kill,默認是true。

yarn.nodemanager.vmem-check-enabled

是否啓用一個線程檢查每個任務證使用的虛擬內存量,如果任務超出了分配值,則直接將其kill,默認是true。

yarn.scheduler.minimum-allocation-mb

單個任務可以使用最小物理內存量,默認1024m,如果一個任務申請物理內存量少於該值,則該對應值改爲這個數。

yarn.scheduler.maximum-allocation-mb

單個任務可以申請的最多的內存量,默認8192m

Yarn cpu管理:

目前cpu被劃分爲虛擬cpu,這裏的虛擬cpu是yarn自己引入的概念,初衷是考慮到不同節點cpu性能可能不同,每個cpu具有計算能力也是不一樣的,比如,某個物理cpu計算能力可能是另外一個物理cpu的2倍,這時候,你可以通過爲第一個物理cpu多配置幾個虛擬cpu彌補這種差異。用戶提交作業時,可以指定每個任務需要的虛擬cpu個數。在yarn中,cpu相關配置參數如下:

yarn.nodemanager.resource.cpu-vcores

表示該節點上yarn可使用的虛擬cpu個數,默認是8個,注意,目前推薦將該值爲與物理cpu核數相同。如果你的節點cpu合數不夠8個,則需要調減小這個值,而yarn不會智能的探測節點物理cpu總數。

yarn.scheduler.minimum-allocation-vcores

單個任務可申請最小cpu個數,默認1,如果一個任務申請的cpu個數少於該數,則該對應值被修改爲這個數

yarn.scheduler.maximum-allocation-vcores

單個任務可以申請最多虛擬cpu個數,默認是32.



原文地址:https://www.cnblogs.com/wcwen1990/p/6737985.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章