默默無聞的Yarn

題記

爲何忽然想起來寫一篇關於yarn的文章呢,是由於今天同事想我討教spark提交任務的方式有哪幾種,我回答到local、yarn cluster、yarn client等。我剛想向他解釋這幾種提交方式的區別,沒想到他卻問我,什麼是yarn?說實話,我有點措不及防,由於yarn如今確實不多被人注意和討論,當初仍是在學習Hadoop2的時候,來對yarn這個新加入的資源管理組件進行調研的。在如今提交任務的時候,老是 --master yarn的一筆帶過,卻不多的去關注yarn了,因此我說yarn是默默無聞的。
https://images2015.cnblogs.co...
clipboard.pngnode

1、YARN基本服務組件

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

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

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

  • 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機制。
https://images2015.cnblogs.co...
clipboard.png框架

YARN的架構設計使其愈來愈像是一個雲操做系統,數據處理操做系統。分佈式

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

  • 調度器(Scheduler)

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

  • 應用程序管理器(Applications Manager,ASM)

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

2.ApplicationMaster(AM)spa

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

(1)數據切分
 (2)爲應用程序申請資源並進一步分配給內部任務。
 (3)任務監控與容錯

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

3.NodeManager(NM)

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

(1)單個節點上的資源管理和任務。
   (2)處理來自於resourcemanager的命令。
   (3)處理來自域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進行資源隔離。
功能:

(1)對task環境的抽象
    (2)描述一系列信息
    (3)任務運行資源的集合(cpu、內存、io等)
    (4)任務運行環境

2、YARN的資源管理

一、資源調度和隔離是yarn做爲一個資源管理系統,最重要且最基礎的兩個功能。資源調度由resourcemanager完成,而資源隔離由各個nodemanager實現。
二、Resourcemanager將某個nodemanager上資源分配給任務(這就是所謂的「資源調度」)後,nodemanager需按照要求爲任務提供相應的資源,甚至保證這些資源應具備獨佔性,爲任務運行提供基礎和保證,這就是所謂的資源隔離。
三、當談及到資源時,咱們一般指內存、cpu、io三種資源。Hadoop yarn目前爲止僅支持cpu和內存兩種資源管理和調度。
四、內存資源多少決定任務的生死,若是內存不夠,任務可能運行失敗;相比之下,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.

總結

YARN(Yet Another Resource Negotiator),也稱Hadoop2.0,是新一代的通用資源管理系統。它在Hadoop 1.0(MRv1)的基礎上,提供了更強大的可伸縮性和靈活性。對原有的架構進行了去中心化的處理,將資源管理和任務協調分爲兩個不一樣的進程來處理。此外,它特定的ApplicationMaster支持在容器(cpu、內存、磁盤和網絡IO等資源)內運行任何類型的任務,給創造新的分佈式應用程序框架提供了條件,從而除了MapReduce以外,它還能夠運行Giraph、Storm、Spark、Tez/Impala、MPI 等,只須要使用特定的ApplicationMaster便可。

相關文章
相關標籤/搜索