通過(guò)對(duì)Hadoop1.0和2.0的架構(gòu)對(duì)比,引出了YARN作為資源調(diào)度和管理器的作用弧哎。
1搬男、YARN產(chǎn)生的背景
YARN是MRv1基礎(chǔ)上演化而來(lái)的钞它,克服了MRv1中的各種局限性募谎。在正式的介紹YARN之前扶关,我們先要了解MRv1的一些局限性阴汇,這可概括為以下幾個(gè)方面:
- 擴(kuò)展性差:在MRv1中数冬,JobTracker同時(shí)兼?zhèn)淞速Y源管理和作業(yè)控制兩個(gè)功能,這個(gè)成為系統(tǒng)的一個(gè)最大瓶頸搀庶,嚴(yán)重制約了Hadoop集群的擴(kuò)展性拐纱。
- 可靠性差:MRv1采用的master/slaver結(jié)構(gòu),其中master節(jié)點(diǎn)存在單點(diǎn)故障問(wèn)題哥倔,一旦它出現(xiàn)故障將導(dǎo)致整個(gè)集群不可用秸架。
- 資源利用率低:MRv1采用了基于槽位的資源分配模型,槽位是一種粗粒度的資源劃分單位咆蒿,通常一個(gè)任務(wù)不會(huì)用完槽位對(duì)應(yīng)的資源东抹,且其他任務(wù)也無(wú)法使用這些空閑資源。此外沃测,Hadoop將槽位分為Map Slot和Reduce Slot兩種缭黔,且不允許它們之間共享,常常會(huì)導(dǎo)致一種槽位資源緊張而另一種閑置(比如一個(gè)作業(yè)剛剛提交時(shí)蒂破,只會(huì)運(yùn)行Map Task馏谨,此時(shí)Reduce Slot閑置)。
- 無(wú)法支持多種計(jì)算框架附迷。
2惧互、什么是YARN?
YARN實(shí)際上是一個(gè)彈性計(jì)算平臺(tái)喇伯,它的目標(biāo)已經(jīng)不再局限于支持MapReduce一種計(jì)算框架了喊儡,而是朝著對(duì)多種框架進(jìn)行統(tǒng)一管理的方向發(fā)展。YARN的基本思想是將資源管理和作業(yè)調(diào)度/監(jiān)視的功能拆分為單獨(dú)的守護(hù)程序稻据。 擁有一個(gè)全局的ResourceManager(RM)
和每個(gè)應(yīng)用程序的ApplicationMaster(AM)
艾猜。 應(yīng)用程序可以是單個(gè)作業(yè),也可以是作業(yè)的DAG。
3箩朴、YARN的作用是什么岗喉?
3.1、Hadoop v1.0的方式
在Hadoop v1.0的框架中炸庞,對(duì)數(shù)據(jù)的處理钱床、資源調(diào)度主要依賴(lài)MapReduce完成,具體過(guò)程如下所示:
從以上圖中埠居,我們可以了解到Hadoop v1.0的數(shù)據(jù)處理方式查牌。在小規(guī)模的數(shù)據(jù)處理過(guò)程中,這套方法沒(méi)有太大問(wèn)題滥壕。但是纸颜,在真實(shí)的場(chǎng)景中往往需要處理大量數(shù)據(jù),這套方法便會(huì)遇到以下問(wèn)題:
- 由于大量的數(shù)據(jù)處理Job提交給Job Tracker绎橘,且Job Tracker需要協(xié)調(diào)的Data Node可能有數(shù)千臺(tái)胁孙,Job Tracker極易成為整個(gè)系統(tǒng)的性能、可用的瓶頸称鳞。
- 無(wú)法有效地調(diào)配資源涮较,導(dǎo)致資源分配不均。如以下例子冈止,假設(shè)有3臺(tái)Data Node(DN)狂票,每個(gè)DN的內(nèi)存為4GB。用戶(hù)提交了6個(gè)Job熙暴,每個(gè)Job需要1GB內(nèi)存進(jìn)行處理闺属,且數(shù)據(jù)均在DN2上。由于DN2只有4GB內(nèi)存周霉,所以Job1-4在DN2上運(yùn)行掂器,Job5和6則在排隊(duì)等待。但是诗眨,此時(shí)DN1和3均在閑置的狀態(tài)下唉匾,而未能有效的被利用。
3.2匠楚、YARN的方式
基于上述問(wèn)題巍膘,Hadoop在2.0版本上推出了YARN (Yet Another Resource Negotiator)。YARN的核心思想是將資源管理和Job的調(diào)度/監(jiān)控進(jìn)行分離芋簿。YARN的架構(gòu)如下圖所示峡懈。
YARN的核心組件可以分為兩大部分:
全局組件
-
Resource Manager(RM)
: 作為全局統(tǒng)一的資源管理、調(diào)度与斤、分配肪康。Resource Manager由Scheduler(調(diào)度器:本質(zhì)上是一種策略)和Applicatio Manager(應(yīng)用程序管理器荚恶,ASM:負(fù)責(zé)管理Client用戶(hù)提交的應(yīng)用)組成。Scheduler根據(jù)節(jié)點(diǎn)的容量磷支、隊(duì)列情況谒撼,為Application分配資源;Application Manager接受用戶(hù)提交的請(qǐng)求雾狈,在節(jié)點(diǎn)中啟動(dòng)Application Master廓潜,并監(jiān)控Application Master的狀態(tài)、進(jìn)行必要的重啟善榛。 -
Node Manager(NM)
: 在每一個(gè)節(jié)點(diǎn)上都有一個(gè)Node Manager作為代理監(jiān)控節(jié)點(diǎn)的資源使用情況(cpu, memory, disk, network)并向Resource Manager上報(bào)節(jié)點(diǎn)狀態(tài)辩蛋。
Per-applicaiton組件
-
Application Master(AM)
: 負(fù)責(zé)數(shù)據(jù)處理job的執(zhí)行調(diào)度。Application Master與Resource Manager進(jìn)行溝通移盆,獲取資源進(jìn)行計(jì)算悼院。得到資源后,與節(jié)點(diǎn)上的Node Manager進(jìn)行溝通咒循,在分配的Container匯總執(zhí)行任務(wù)据途,并監(jiān)控任務(wù)執(zhí)行的情況。(每當(dāng) Client 提交一個(gè) Application 時(shí)候剑鞍,就會(huì)新建一個(gè) ApplicationMaster 昨凡。由這個(gè) ApplicationMaster 去與 ResourceManager 申請(qǐng)容器資源爽醋,獲得資源后會(huì)將要運(yùn)行的程序發(fā)送到容器上啟動(dòng)蚁署,然后進(jìn)行分布式計(jì)算。) -
Container
: 資源的一種抽象方式蚂四,它封裝了某個(gè)節(jié)點(diǎn)上的多維度資源光戈,如內(nèi)存、CPU饺律、磁盤(pán)步做、網(wǎng)絡(luò)等窒升,當(dāng)Application Master向Resource Manager申請(qǐng)資源時(shí),Resource Manager為Application Master返回的資源便是Container筷弦。
當(dāng)YARN接受用戶(hù)提交的Job時(shí),其工作過(guò)程為:
YARN通過(guò)以下方式抑诸,解決了上述問(wèn)題烂琴。
- 通過(guò)Application Master來(lái)解決Job Tracker的瓶頸問(wèn)題。每當(dāng)新的job提交進(jìn)來(lái)后蜕乡,Resource Manager會(huì)在恰當(dāng)?shù)墓?jié)點(diǎn)啟動(dòng)一個(gè)新的Application Master奸绷,從而避免在Hadoop v1.0中Job Tracker成為性能瓶頸的尷尬。
- 更有效的進(jìn)行資源的調(diào)度层玲。Resource Manager可以為Application Master分配空余的資源号醉,幫忙Application Master完成任務(wù)反症。
- 支持MapReduce以外的數(shù)據(jù)處理方式,例如:Spark等畔派。
4铅碍、YARN和其他的資源管理器的對(duì)比
即便Hadoop v2.0應(yīng)用來(lái)YARN的設(shè)計(jì)思路,也仍有一個(gè)難題:當(dāng)大量的job提交线椰、用盡所有計(jì)算資源后该酗,新的job要等待很久才能被處理,即便新的job是非常重要的任務(wù)士嚎,也只能等待呜魄。在YARN中,通過(guò)scheduler plugin
(例如:FIFO Scheduler
莱衩、Fair Scheduler
爵嗅、Capacity Scheduler
)的方式,配置不同的資源調(diào)度規(guī)則笨蚁,來(lái)盡量緩解該問(wèn)題睹晒,讓重要的job可以?xún)?yōu)先獲得資源調(diào)配。
5括细、參考資料
http://www.reibang.com/p/952d59b7cbe7
https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html