董西城《深入解析YARN》- 第6章 資源調(diào)度器

6.3 YARN資源調(diào)度器的基本架構(gòu)

資源調(diào)度器的基本架構(gòu).png

6.3.2 資源表示模型

NodeManager啟動(dòng)時(shí)會(huì)向ResourceManager注冊(cè),注冊(cè)信息中包含該節(jié)點(diǎn)可分配的CPU和內(nèi)存總量,這兩個(gè)值均可通過配置選項(xiàng)設(shè)置,具體如下:

  • ?yarn.nodemanager.resource.memory-mb∑餐蹋可分配的物理內(nèi)存總量,默認(rèn)是8MB×1024,即8GB怨咪。
  • ?yarn.nodemanager.vmem-pmem-ratio。任務(wù)使用單位物理內(nèi)存量對(duì)應(yīng)最多可使用的虛擬內(nèi)存量润匙,默認(rèn)值是2.1诗眨,表示每使用1MB的物理內(nèi)存,最多可以使用2.1MB的虛擬內(nèi)存總量孕讳。
  • ?yarn.nodemanager.resource.cpu-vcores匠楚。可分配的虛擬CPU個(gè)數(shù)厂财,默認(rèn)是8芋簿。為了更細(xì)粒度地劃分CPU資源和考慮到CPU性能異構(gòu)性,YARN允許管理員根據(jù)實(shí)際需要和CPU性能將每個(gè)物理CPU劃分成若干個(gè)虛擬CPU璃饱,而管理員可為每個(gè)節(jié)點(diǎn)單獨(dú)配置可用的虛擬CPU個(gè)數(shù)益咬,且用戶提交應(yīng)用程序時(shí),也可指定每個(gè)任務(wù)需要的虛擬CPU個(gè)數(shù)帜平。比如node1節(jié)點(diǎn)上有8個(gè)CPU幽告,node2上有16個(gè)CPU,且node1CPU性能是node2的2倍裆甩,那么可為這兩個(gè)節(jié)點(diǎn)配置相同數(shù)目的虛擬CPU個(gè)數(shù)冗锁,比如均為32。由于用戶設(shè)置虛擬CPU個(gè)數(shù)必須是整數(shù)嗤栓,每個(gè)任務(wù)至少使用node2的半個(gè)CPU(不能更少了)冻河。

(2)不支持的調(diào)度語義當(dāng)前不支持的調(diào)度語義包括:
?請(qǐng)求任意節(jié)點(diǎn)上的特定資源量。比如茉帅,請(qǐng)求任意節(jié)點(diǎn)上5個(gè)這樣的Container:虛擬CPU個(gè)數(shù)為3叨叙,內(nèi)存量為1GB。
?請(qǐng)求任意機(jī)架上的特定資源量堪澎。
?請(qǐng)求一組或幾組符合某種特質(zhì)的資源擂错。比如,請(qǐng)求來自兩個(gè)機(jī)架上的4個(gè)Container樱蛤,其中钮呀,一個(gè)機(jī)架上2個(gè)這樣的Container:虛擬CPU個(gè)數(shù)為2剑鞍,內(nèi)存量為2GB;
?超細(xì)粒度資源爽醋。比如CPU性能要求蚁署、綁定CPU等。
?動(dòng)態(tài)調(diào)整Container資源蚂四,應(yīng)允許根據(jù)需要?jiǎng)討B(tài)調(diào)整Container資源量(對(duì)于長作業(yè)尤其有用)光戈。

6.3.3 資源調(diào)度模型

(1)雙層資源調(diào)度模型YARN采用了雙層資源調(diào)度模型:
在第一層中,ResourceManager中的資源調(diào)度器將資源分配給各個(gè)ApplicationMaster遂赠;
在第二層中久妆,ApplicationMaster再進(jìn)一步將資源分配給它內(nèi)部的各個(gè)任務(wù)。本章所介紹的資源調(diào)度器主要關(guān)注的是第一層的調(diào)度問題解愤,至于第二層的調(diào)度策略镇饺,完全由用戶應(yīng)用程序自己決定

步驟1 NodeManager通過周期性心跳匯報(bào)節(jié)點(diǎn)信息。
步驟2 ResourceManager為NodeManager返回一個(gè)心跳應(yīng)答送讲,包括需釋放的Container列表等信息奸笤。
步驟3 ResourceManager收到來自NodeManager的信息后,會(huì)觸發(fā)一個(gè)NODE_UPDATE事件哼鬓。
步驟4 ResourceScheduler收到NODE_UPDATE事件后监右,會(huì)按照一定的策略將該節(jié)點(diǎn)上的資源(步驟2中有釋放的資源)分配各應(yīng)用程序,并將分配結(jié)果放到一個(gè)內(nèi)存數(shù)據(jù)結(jié)構(gòu)中异希。
步驟5 應(yīng)用程序的ApplicationMaster向ResourceManager發(fā)送周期性的心跳健盒,以領(lǐng)取最新分配的Container。
步驟6 ResourceManager收到來自ApplicationMaster心跳信息后称簿,為它分配的container將以心跳應(yīng)答的形式返回給ApplicationMaster扣癣。
步驟7 ApplicationMaster收到新分配的container列表后,會(huì)將這些Container進(jìn)一步分配給它內(nèi)部的各個(gè)任務(wù)


image.png

資源調(diào)度器關(guān)注的是步驟4中采用的策略憨降,即如何將節(jié)點(diǎn)上空閑的資源分配給各個(gè)應(yīng)用程序父虑,至于步驟7中的策略材部,則完全由用戶應(yīng)用程序自己決定

(2)資源保證機(jī)制
YARN采用了增量資源分配機(jī)制舆逃,盡管這種機(jī)制會(huì)造成浪費(fèi),但不會(huì)出現(xiàn)餓死現(xiàn)象

(3)資源分配算法

YARN資源調(diào)度器采用了主資源公平調(diào)度算法(Dominant ResourceFairness师倔,DRF)[插圖]悔叽,該算法擴(kuò)展了最大最小公平(max-min fairness)算法[插圖]莱衩,使其能夠支持多維資源的調(diào)度。由于DRF被證明非常適合應(yīng)用于多資源和復(fù)雜需求的環(huán)境中娇澎,因此被越來越多的系統(tǒng)采用笨蚁,包括Apache Mesos。

在DRF算法中,將所需份額(資源比例)最大的資源稱為主資源赚窃,而DRF的基本設(shè)計(jì)思想則是將最大最小公平算法應(yīng)用于主資源上册招,進(jìn)而將多維資源調(diào)度問題轉(zhuǎn)化為單資源調(diào)度問題岔激,即DRF總是最大化所有主資源中最小的勒极,其算法偽代碼如下

6.3.4 資源搶占模型

下面我們舉例說明。如圖6-5所示虑鼎,整個(gè)集群資源總量為100(為了簡便辱匿,沒有區(qū)分CPU或者內(nèi)存),且被分為三個(gè)隊(duì)列炫彩,分別是QueueA匾七、QueueB和QueueC。它們的最小資源量和最大資源量(由管理員配置)分別是(10,15)江兢、(20,35)和(60,65)昨忆。某一時(shí)刻,它們尚需的資源量和正在使用的資源量分別是(0,5)杉允、(10,30)和(60,65)邑贴,即隊(duì)列QueueA負(fù)載較輕,部分資源暫時(shí)不會(huì)使用叔磷,它將不會(huì)使用的5個(gè)資源共享給了其他兩個(gè)隊(duì)列(QueueB和QueueC分別得到2個(gè)和3個(gè))拢驾,而隊(duì)列QueueB和QueueC除了使用來自隊(duì)列QueueA的資源外,還使用了整個(gè)系統(tǒng)共享的10個(gè)資源(100–10–20–60=10)改基。某一時(shí)刻繁疤,隊(duì)列QueueA突然增加了一批應(yīng)用程序,此時(shí)共需要20個(gè)資源秕狰,則資源調(diào)度器需要從QueueB和QueueC中搶占5個(gè)本該屬于QueueA的資源稠腊。需要注意的是,為了避免資源浪費(fèi)鸣哀,資源調(diào)度器通常會(huì)等待一段時(shí)間后才會(huì)強(qiáng)制回收資源架忌,而在這段等待時(shí)間內(nèi),QueueB和QueueC可能已經(jīng)釋放了本該屬于QueueA的資源

image.png

在YARN中诺舔,資源搶占整個(gè)過程可概括為如下步驟:

  • 步驟1 SchedulingEditPolicy探測(cè)到需要搶占的資源鳖昌,將需要搶占的資源通過事件DROP_RESERVATION和PREEMPT_CONTAINER發(fā)送給ResourceManager。

  • 步驟2 ResourceManager調(diào)用ResourceScheduler的dropContainerReservation和preempt-Container函數(shù)低飒,標(biāo)注待搶占的Container许昨。

  • 步驟3 ResourceManager收到來自ApplicationMaster的心跳信息,并通過心跳應(yīng)答將待釋放的資源總量和待搶占Container列表發(fā)返回給它褥赊。ApplicationMaster收到該列表后糕档,可選擇如下操作:
    1)殺死這些Container。
    2)選擇并殺死其他Container以湊夠總量。
    3)不做任務(wù)處理速那,過段時(shí)間可能有Container自行釋放資源或者由ResourceManager殺死Container

  • 步驟4 SchedulingEditPolicy探測(cè)到一段時(shí)間內(nèi)俐银,ApplicationMaster未自行殺死約定的Container,則將這些Container封裝到KILL_CONTAINER事件中發(fā)送給ResourceManager端仰。

  • 步驟5 ResourceManager調(diào)用ResourceScheduler的killContainer函數(shù)捶惜,而Resource-Scheduler則標(biāo)注這些待殺死的Container。

  • 步驟6 ResourceManager收到來自NodeManager的心跳信息荔烧,并通過心跳應(yīng)答將待殺死的Container列表返回給它吱七,NodeManager收到該列表后,將這些Container殺死鹤竭,并通過心跳告知ResourceManager踊餐。

  • 步驟7 ResourceManager收到來自ApplicationMaster的心跳信息,并通過心跳應(yīng)答將已經(jīng)殺死的Container列表發(fā)送給它(可能ApplicationMaster早已通過內(nèi)部通信機(jī)制知道了這些被殺死的Container)臀稚。

資源搶占整個(gè)過程.png

如何決定是否搶占某個(gè)隊(duì)列的資源吝岭?在YARN中,隊(duì)列是按照樹形結(jié)構(gòu)組織的吧寺,一個(gè)隊(duì)列當(dāng)前實(shí)際可以使用的資源量R取決于最小資源量A(由管理員配置)窜管、隊(duì)列資源需求量B(處于等待或者運(yùn)行狀態(tài)的應(yīng)用程序尚需的資源總量)和同父兄弟隊(duì)列的空閑資源量C(多余資源可共享給其他隊(duì)列),這意味著R在不同時(shí)間點(diǎn)的取值是不同的撮执,可以按照遞歸算法求出R=F(A,B,C)微峰,這樣,如果一個(gè)隊(duì)列當(dāng)前正在使用資源量U>R抒钱,則需從該隊(duì)列中搶占(U–R)資源蜓肆。

6.4 YARN層級(jí)隊(duì)列管理機(jī)制

6.4.1 層級(jí)隊(duì)列管理機(jī)制

該隊(duì)列組織方式具有以下特點(diǎn):
?子隊(duì)列。具體包括如下兩點(diǎn): 
?隊(duì)列可以嵌套谋币,每個(gè)隊(duì)列均可以包含子隊(duì)列仗扬。 
?用戶只能將應(yīng)用程序提交到最底層的隊(duì)列蕾额,即葉子隊(duì)列早芭。

?最少容量。具體包括如下四點(diǎn): 
?每個(gè)子隊(duì)列均有一個(gè)“最少容量比”屬性诅蝶,表示可以使用父隊(duì)列的容量的百分比退个。 ?調(diào)度器總是優(yōu)先選擇當(dāng)前資源使用率最低的隊(duì)列调炬,并為之分配資源语盈。比如同級(jí)的兩個(gè)隊(duì)列Q1和Q2,它們的最少容量均為30缰泡,而Q1已使用10刀荒,Q2已使用12,則調(diào)度器會(huì)優(yōu)先將資源分配給Q1〔瑁 
?最少容量不是“總會(huì)保證的最低容量”干毅,也就是說,如果一個(gè)隊(duì)列的最少容量為20泼返,而該隊(duì)列中所有隊(duì)列僅使用了5硝逢,那么剩下的15可能會(huì)分配給其他需要的隊(duì)列》叮 
?最少容量的值為不小于0的數(shù)趴捅,但也不能大于“最大容量”垫毙。

?最大容量霹疫。具體包括如下兩點(diǎn): 
?為了防止一個(gè)隊(duì)列超量使用資源,可以為隊(duì)列設(shè)置一個(gè)最大容量综芥,這是一個(gè)資源使用上限丽蝎,任何時(shí)刻使用的資源總量都不能超過該值; 
?默認(rèn)情況下隊(duì)列的最大容量是無限大膀藐,這意味著屠阻,當(dāng)一個(gè)隊(duì)列只分配了20%的資源,所有其他隊(duì)列沒有應(yīng)用程序時(shí)额各,該隊(duì)列可能使用100%的資源国觉,當(dāng)其他隊(duì)列有應(yīng)用程序提交時(shí),再逐步歸還虾啦。

6.4.2 隊(duì)列命名規(guī)則

為了防止隊(duì)列名稱沖突和便于識(shí)別隊(duì)列麻诀,YARN采用了自頂向下的路徑命名隊(duì)列,其中傲醉,父隊(duì)列與子隊(duì)列名稱采用“.”拼接蝇闭。下圖 是一個(gè)公司內(nèi)部的組織架構(gòu),映射到Y(jié)ARN中硬毕,所有隊(duì)列命名如下:


圖6-8.png

圖6-8中有兩個(gè)同名的隊(duì)列C呻引,通過引入隊(duì)列路徑后,可以很容易區(qū)分出這兩個(gè)隊(duì)列吐咳,一個(gè)是"ROOT.C"逻悠,另外一個(gè)是"ROOT.C.C"

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市韭脊,隨后出現(xiàn)的幾起案子童谒,更是在濱河造成了極大的恐慌,老刑警劉巖乾蓬,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惠啄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)撵渡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門融柬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人趋距,你說我怎么就攤上這事粒氧。” “怎么了节腐?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵外盯,是天一觀的道長。 經(jīng)常有香客問我翼雀,道長饱苟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任狼渊,我火速辦了婚禮箱熬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狈邑。我一直安慰自己城须,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布米苹。 她就那樣靜靜地躺著糕伐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蘸嘶。 梳的紋絲不亂的頭發(fā)上良瞧,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音亏较,去河邊找鬼莺褒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛雪情,可吹牛的內(nèi)容都是我干的遵岩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼巡通,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼尘执!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宴凉,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤誊锭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后弥锄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丧靡,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蟆沫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了温治。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饭庞。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖熬荆,靈堂內(nèi)的尸體忽然破棺而出舟山,到底是詐尸還是另有隱情,我是刑警寧澤卤恳,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布累盗,位于F島的核電站,受9級(jí)特大地震影響突琳,放射性物質(zhì)發(fā)生泄漏若债。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一本今、第九天 我趴在偏房一處隱蔽的房頂上張望拆座。 院中可真熱鬧,春花似錦冠息、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搞旭,卻和暖如春散怖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肄渗。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工镇眷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翎嫡。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓欠动,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惑申。 傳聞我的和親對(duì)象是個(gè)殘疾皇子具伍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容