1. 程式人生 > >MapReduce程式在yarn叢集上流程分析

MapReduce程式在yarn叢集上流程分析

yarn本身也是一個叢集,這個叢集的老大是resourcemanager,其他的小弟是nodemanager。

yarn 是一個資源排程平臺,負責為運算程式提供伺服器運算資源,相當於一個分散式的作業系統平臺,而MapReduce等運算程式則相當於是運行於作業系統之上的應用程式。
運算資源有:運算測程式jar包,配置檔案,cpu,記憶體,IO

Linux作業系統提供一種機制可以不同的程序分開這些運算資源(cpu和記憶體)-- cgroup (Linux的資源隔離機制)
現在很多的虛擬化技術就是利用這個機制來做資源隔離的。比如說 docker


每一個node manager 都有一個 container (容器),一個container裡面是一定的cpu + 記憶體 + 運算程式所需要的jar包

所謂的yarn就是用來管理這些容器的分配的。

yarn 是hadoop 2.0 中的資源管理系統,它的基本設計思想是將MR v1 中的JobTracker拆分
成了兩個獨立的服務:一個全域性的資源管理器ResourseManager和每個應用程式特有的
ApplicationMaster。
其中ResourceManager負責整個系統的資源管理和分配,而ApplicationMaster負責單個應用
程式的管理。

在這裡插入圖片描述
有兩個client,提交兩個程式。
YARN總體上仍然是master/slave結構,在整個資源管理框架中,resourcemanager為master,nodemanager是slave。Resourcemanager負責對各個nademanger上資源進行統一管理和排程。當用戶提交一個應用程式時,需要提供一個用以跟蹤和管理這個程式的ApplicationMaster,它負責向ResourceManager申請資源,並要求NodeManger啟動可以佔用一定資源的任務。由於不同的ApplicationMaster被分佈到不同的節點上,因此它們之間不會相互影響。
有兩個應用程式所以又兩個ApplicationMaster,這連個ApplicationMaster是分到不同的node節點的。

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的架構設計使其越來越像是一個雲作業系統,資料處理作業系統。

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和記憶體等資源)

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

功能:

     對task環境的抽象

    描述一系列資訊

    任務執行資源的集合(cpu、記憶體、io等)

    任務執行環境

參考的部落格:
https://www.cnblogs.com/wcwen1990/p/6737985.html

yarn
只負責程式執行所需要的分配回收等排程任務,與應用程式的內部運作機制完全無關。
所以,yarn已經成為一個通用的資源排程平臺,許許多多的運算框架都可以藉助它來實現資源管理。比如 MR /SPARK/STORM/TEZ/FLINK