溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么分析yarn的調(diào)度模式

發(fā)布時(shí)間:2022-01-14 15:52:11 來源:億速云 閱讀:127 作者:柒染 欄目:云計(jì)算

這篇文章跟大家分析一下“怎么分析yarn的調(diào)度模式”。內(nèi)容詳細(xì)易懂,對(duì)“怎么分析yarn的調(diào)度模式”感興趣的朋友可以跟著小編的思路慢慢深入來閱讀一下,希望閱讀后能夠?qū)Υ蠹矣兴鶐椭?。下面跟著小編一起深入學(xué)習(xí)“怎么分析yarn的調(diào)度模式”的知識(shí)吧。

Hadoop  YARN同時(shí)支持內(nèi)存和CPU兩種資源的調(diào)度(默認(rèn)只支持內(nèi)存,如果想進(jìn)一步調(diào)度CPU,需要自己進(jìn)行一些配置),小編將介紹YARN是如何對(duì)這些資源進(jìn)行調(diào)度和隔離的。yarn對(duì)于自己運(yùn)行時(shí)作業(yè)的資源分配模式有Capacity Scheduler和Fair Scheduler兩種。

在YARN中,資源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的調(diào)度器負(fù)責(zé) 資源的分配,而NodeManager則負(fù)責(zé)資源的供給和隔離。ResourceManager將某個(gè)NodeManager上資源分配給任務(wù)(這就是所 謂的“資源調(diào)度”)后,NodeManager需按照要求為任務(wù)提供相應(yīng)的資源,甚至保證這些資源應(yīng)具有獨(dú)占性,為任務(wù)運(yùn)行提供基礎(chǔ)的保證,這就是所謂的 資源隔離。

基于以上考慮,YARN允許用戶配置每個(gè)節(jié)點(diǎn)上可用的物理內(nèi)存資源,注意,這里是“可用的”,因?yàn)橐粋€(gè)節(jié)點(diǎn)上的內(nèi)存會(huì)被若干個(gè)服務(wù)共享,比如一部分給YARN,一部分給HDFS,一部分給HBase等,YARN配置的只是自己可以使用的,配置參數(shù)如下:

(1)yarn.nodemanager.resource.memory-mb

表示該節(jié)點(diǎn)上YARN可使用的物理內(nèi)存總量,默認(rèn)是8192(MB),注意,如果你的節(jié)點(diǎn)內(nèi)存資源不夠8GB,則需要調(diào)減小這個(gè)值,而YARN不會(huì)智能的探測(cè)節(jié)點(diǎn)的物理內(nèi)存總量。

(2)yarn.nodemanager.vmem-pmem-ratio

任務(wù)每使用1MB物理內(nèi)存,最多可使用虛擬內(nèi)存量,默認(rèn)是2.1。

(3) yarn.nodemanager.pmem-check-enabled

是否啟動(dòng)一個(gè)線程檢查每個(gè)任務(wù)正使用的物理內(nèi)存量,如果任務(wù)超出分配值,則直接將其殺掉,默認(rèn)是true。

(4) yarn.nodemanager.vmem-check-enabled

是否啟動(dòng)一個(gè)線程檢查每個(gè)任務(wù)正使用的虛擬內(nèi)存量,如果任務(wù)超出分配值,則直接將其殺掉,默認(rèn)是true。

(5)yarn.scheduler.minimum-allocation-mb

單個(gè)任務(wù)可申請(qǐng)的最少物理內(nèi)存量,默認(rèn)是1024(MB),如果一個(gè)任務(wù)申請(qǐng)的物理內(nèi)存量少于該值,則該對(duì)應(yīng)的值改為這個(gè)數(shù)。

(6)yarn.scheduler.maximum-allocation-mb

單個(gè)任務(wù)可申請(qǐng)的最多物理內(nèi)存量,默認(rèn)是8192(MB)。

默認(rèn)情況下,YARN采用了線程監(jiān)控的方法判斷任務(wù)是否超量使用內(nèi)存,一旦發(fā)現(xiàn)超量,則直接將其殺死。由于Cgroups對(duì)內(nèi)存的控制缺乏靈活性 (即任務(wù)任何時(shí)刻不能超過內(nèi)存上限,如果超過,則直接將其殺死或者報(bào)OOM),而Java進(jìn)程在創(chuàng)建瞬間內(nèi)存將翻倍,之后驟降到正常值,這種情況下,采用 線程監(jiān)控的方式更加靈活(當(dāng)發(fā)現(xiàn)進(jìn)程樹內(nèi)存瞬間翻倍超過設(shè)定值時(shí),可認(rèn)為是正?,F(xiàn)象,不會(huì)將任務(wù)殺死),因此YARN未提供Cgroups內(nèi)存隔離機(jī)制。

Capacity Scheduler

Capacity Scheduler支持以下特性:

(1) 計(jì)算能力保證。支持多個(gè)隊(duì)列,某個(gè)作業(yè)可被提交到某一個(gè)隊(duì)列中。每個(gè)隊(duì)列會(huì)配置一定比例的計(jì)算資源,且所有提交到隊(duì)列中的作業(yè)共享該隊(duì)列中的資源。

(2) 靈活性??臻e資源會(huì)被分配給那些未達(dá)到資源使用上限的隊(duì)列,當(dāng)某個(gè)未達(dá)到資源的隊(duì)列需要資源時(shí),一旦出現(xiàn)空閑資源資源,便會(huì)分配給他們。

(3) 支持優(yōu)先級(jí)。隊(duì)列支持作業(yè)優(yōu)先級(jí)調(diào)度(默認(rèn)是FIFO)

(4) 多重租賃。綜合考慮多種約束防止單個(gè)作業(yè)、用戶或者隊(duì)列獨(dú)占隊(duì)列或者集群中的資源。

(5) 基于資源的調(diào)度。 支持資源密集型作業(yè),允許作業(yè)使用的資源量高于默認(rèn)值,進(jìn)而可容納不同資源需求的作業(yè)。不過,當(dāng)前僅支持內(nèi)存資源的調(diào)度。


想要配置能力調(diào)度模式首先我們需要將yarn-site.xml文件中設(shè)置yarn.resourcemanager.scheduler.class屬性為org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.CapacityScheduler

1.  資源分配相關(guān)參數(shù)

(1)  capacity:隊(duì)列的資源容量(百分比)。 當(dāng)系統(tǒng)非常繁忙時(shí),應(yīng)保證每個(gè)隊(duì)列的容量得到滿足,而如果每個(gè)隊(duì)列應(yīng)用程序較少,可將剩余資源共享給其他隊(duì)列。注意,所有隊(duì)列的容量之和應(yīng)小于100。

(2)  maximum-capacity:隊(duì)列的資源使用上限(百分比)。由于存在資源共享,因此一個(gè)隊(duì)列使用的資源量可能超過其容量,而最多使用資源量可通過該參數(shù)限制。

minimum-user-limit-percent:每個(gè)用戶最低資源保障(百分比)。任何時(shí)刻,一個(gè)隊(duì)列中每個(gè)用戶可使用的資源量均有一定的限制。當(dāng)一個(gè)隊(duì)列中同時(shí)運(yùn)行多個(gè)用戶的應(yīng)用程序時(shí)中,每個(gè)用戶的使用資源量在一個(gè)最小值和最大值之間浮動(dòng),其中,最小值取決于正在運(yùn)行的應(yīng)用程序數(shù)目,而最大值則由minimum-user-limit-percent決定。比如,假設(shè)minimum-user-limit-percent為25。當(dāng)兩個(gè)用戶向該隊(duì)列提交應(yīng)用程序時(shí),每個(gè)用戶可使用資源量不能超過50%,如果三個(gè)用戶提交應(yīng)用程序,則每個(gè)用戶可使用資源量不能超多33%,如果四個(gè)或者更多用戶提交應(yīng)用程序,則每個(gè)用戶可用資源量不能超過25%。

(3)  user-limit-factor:每個(gè)用戶最多可使用的資源量(百分比)。比如,假設(shè)該值為30,則任何時(shí)刻,每個(gè)用戶使用的資源量不能超過該隊(duì)列容量的30%。

2.  限制應(yīng)用程序數(shù)目相關(guān)參數(shù)

(1)  maximum-applications :集群或者隊(duì)列中同時(shí)處于等待和運(yùn)行狀態(tài)的應(yīng)用程序數(shù)目上限,這是一個(gè)強(qiáng)限制,一旦集群中應(yīng)用程序數(shù)目超過該上限,后續(xù)提交的應(yīng)用程序?qū)⒈痪芙^,默認(rèn)值為 10000。所有隊(duì)列的數(shù)目上限可通過參數(shù)yarn.scheduler.capacity.maximum-applications設(shè)置(可看做默認(rèn) 值),而單個(gè)隊(duì)列可通過參數(shù)yarn.scheduler.capacity.<queue-path>.maximum- applications設(shè)置適合自己的值。

(2)  maximum-am-resource-percent:集群中用于運(yùn)行應(yīng)用程序 ApplicationMaster的資源比例上限,該參數(shù)通常用于限制處于活動(dòng)狀態(tài)的應(yīng)用程序數(shù)目。該參數(shù)類型為浮點(diǎn)型,默認(rèn)是0.1,表示10%。所 有隊(duì)列的ApplicationMaster資源比例上限可通過參數(shù)yarn.scheduler.capacity. maximum-am-resource-percent設(shè)置(可看做默認(rèn)值),而單個(gè)隊(duì)列可通過參數(shù) yarn.scheduler.capacity.<queue-path>. maximum-am-resource-percent設(shè)置適合自己的值。

3.  隊(duì)列訪問和權(quán)限控制參數(shù)

(1)  state 隊(duì)列狀態(tài)可以為STOPPED或者 RUNNING,如果一個(gè)隊(duì)列處于STOPPED狀態(tài),用戶不可以將應(yīng)用程序提交到該隊(duì)列或者它的子隊(duì)列中,類似的,如果ROOT隊(duì)列處于STOPPED 狀態(tài),用戶不可以向集群中提交應(yīng)用程序,但正在運(yùn)行的應(yīng)用程序仍可以正常運(yùn)行結(jié)束,以便隊(duì)列可以優(yōu)雅地退出。

(2)  acl_submit_applications:限定哪些Linux用戶/用戶組可向給定隊(duì)列中提交應(yīng)用程序。需要注意的是,該屬性具有繼承性,即如果一個(gè)用戶可以向某個(gè)隊(duì)列中提交應(yīng)用程序,則它可以向它的所有子隊(duì)列中提交應(yīng)用程序。配置該屬性時(shí),用戶之間或用戶組之間用“,”分割,用戶和用戶組之間用空格分割,比如“user1, user2 group1,group2”。

(3)  acl_administer_queue:為隊(duì)列指定一個(gè)管理員,該管理員可控制該隊(duì)列的所有應(yīng)用程序,比如殺死任意一個(gè)應(yīng)用程序等。同樣,該屬性具有繼承性,如果一個(gè)用戶可以向某個(gè)隊(duì)列中提交應(yīng)用程序,則它可以向它的所有子隊(duì)列中提交應(yīng)用程序。

Fair Scheduler

公平調(diào)度器按資源池(pool)來組織作業(yè),并把資源公平的分到這些資源池里。默認(rèn)情況下,每一個(gè)用戶擁有一個(gè)獨(dú)立的資源池,以使每個(gè)用戶都能獲得 一份等同的集群資源而不管他們提交了多少作業(yè)。按用戶的 Unix 群組或作業(yè)配置(jobconf)屬性來設(shè)置作業(yè)的資源池也是可以的。在每一個(gè)資源池內(nèi),會(huì)使用公平共享(fair sharing)的方法在運(yùn)行作業(yè)之間共享容量(capacity)。用戶也可以給予資源池相應(yīng)的權(quán)重,以不按比例的方式共享集群。

除了提供公平共享方法外,公平調(diào)度器允許賦給資源池保證(guaranteed)最小共享資源,這個(gè)用在確保特定用戶、群組或生產(chǎn)應(yīng)用程序總能獲取 到足夠的資源時(shí)是很有用的。當(dāng)一個(gè)資源池包含作業(yè)時(shí),它至少能獲取到它的最小共享資源,但是當(dāng)資源池不完全需要它所擁有的保證共享資源時(shí),額外的部分會(huì)在 其它資源池間進(jìn)行切分。

要想配置公平調(diào)度模式首先我們需要將yarn-site.xml文件中設(shè)置yarn.resourcemanager.scheduler.class屬性為org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

Fair Scheduler允許用戶將隊(duì)列信息專門放到一個(gè)配置文件(默認(rèn)是fair-scheduler.xml),對(duì)于每個(gè)隊(duì)列,管理員可配置以下幾個(gè)選項(xiàng):

(1)  minResources :最少資源保證量,設(shè)置格式為“X mb, Y vcores”,當(dāng)一個(gè)隊(duì)列的最少資源保證量未滿足時(shí),它將優(yōu)先于其他同級(jí)隊(duì)列獲得資源,對(duì)于不同的調(diào)度策略(后面會(huì)詳細(xì)介紹),最少資源保證量的含義不 同,對(duì)于fair策略,則只考慮內(nèi)存資源,即如果一個(gè)隊(duì)列使用的內(nèi)存資源超過了它的最少資源量,則認(rèn)為它已得到了滿足;對(duì)于drf策略,則考慮主資源使用 的資源量,即如果一個(gè)隊(duì)列的主資源量超過它的最少資源量,則認(rèn)為它已得到了滿足。

(2)  maxResources最多可以使用的資源量,fair scheduler會(huì)保證每個(gè)隊(duì)列使用的資源量不會(huì)超過該隊(duì)列的最多可使用資源量。

(3)  maxRunningApps最多同時(shí)運(yùn)行的應(yīng)用程序數(shù)目。通過限制該數(shù)目,可防止超量Map Task同時(shí)運(yùn)行時(shí)產(chǎn)生的中間輸出結(jié)果撐爆磁盤。

(4)  minSharePreemptionTimeout最小共享量搶占時(shí)間。如果一個(gè)資源池在該時(shí)間內(nèi)使用的資源量一直低于最小資源量,則開始搶占資源。

(5)  schedulingMode/schedulingPolicy:隊(duì)列采用的調(diào)度模式,可以是fifo、fair或者drf。

(6)  aclSubmitApps可向隊(duì)列中提交應(yīng)用程序的Linux用戶或用戶組列表,默認(rèn)情況下為“*”,表示任何用戶均可以向該隊(duì)列提交應(yīng)用程序。需要注意的是,該屬性具有繼承性,即子隊(duì)列的列表會(huì)繼承父隊(duì)列的列表。配置該屬性時(shí),用戶之間或用戶組之間用“,”分割,用戶和用戶組之間用空格分割,比如“user1, user2 group1,group2”。

(7)  aclAdministerApps:該隊(duì)列的管理員列表。一個(gè)隊(duì)列的管理員可管理該隊(duì)列中的資源和應(yīng)用程序,比如可殺死任意應(yīng)用程序。

管理員也可為單個(gè)用戶添加maxRunningJobs屬性限制其最多同時(shí)運(yùn)行的應(yīng)用程序數(shù)目。此外,管理員也可通過以下參數(shù)設(shè)置以上屬性的默認(rèn)值:

(1)  userMaxJobsDefault:用戶的maxRunningJobs屬性的默認(rèn)值。

(2) defaultMinSharePreemptionTimeout :隊(duì)列的minSharePreemptionTimeout屬性的默認(rèn)值。

(3)  defaultPoolSchedulingMode:隊(duì)列的schedulingMode屬性的默認(rèn)值。

(4)  fairSharePreemptionTimeout:公平共享量搶占時(shí)間。如果一個(gè)資源池在該時(shí)間內(nèi)使用資源量一直低于公平共享量的一半,則開始搶占資源。

關(guān)于怎么分析yarn的調(diào)度模式就分享到這里啦,希望上述內(nèi)容能夠讓大家有所提升。如果想要學(xué)習(xí)更多知識(shí),請(qǐng)大家多多留意小編的更新。謝謝大家關(guān)注一下億速云網(wǎng)站!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI