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