Spark Yarn 調(diào)度器Scheduler詳解

(轉(zhuǎn)載:http://www.mamicode.com/info-detail-1097801.html)

一阱持、調(diào)度器的選擇

在Yarn中有三種調(diào)度器可以選擇:FIFO Scheduler瀑粥,Capacity Scheduler,F(xiàn)airS cheduler萍诱。

FIFO Scheduler把應(yīng)用按提交的順序排成一個隊(duì)列悬嗓,這是一個先進(jìn)先出隊(duì)列,在進(jìn)行資源分配的時候裕坊,先給隊(duì)列中最頭上的應(yīng)用進(jìn)行分配資源包竹,待最頭上的應(yīng)用需求滿足后再給下一個分配,以此類推碍庵。

FIFO Scheduler是最簡單也是最容易理解的調(diào)度器映企,也不需要任何配置,但它并不適用于共享集群静浴。大的應(yīng)用可能會占用所有集群資源堰氓,這就導(dǎo)致其它應(yīng)用被阻塞。在共享集群中苹享,更適合采用Capacity Scheduler或Fair Scheduler双絮,這兩個調(diào)度器都允許大任務(wù)和小任務(wù)在提交的同時獲得一定的系統(tǒng)資源。

下面“Yarn調(diào)度器對比圖”展示了這幾個調(diào)度器的區(qū)別得问,從圖中可以看出囤攀,在FIFO 調(diào)度器中,小任務(wù)會被大任務(wù)阻塞宫纬。

而對于Capacity調(diào)度器焚挠,有一個專門的隊(duì)列用來運(yùn)行小任務(wù),但是為小任務(wù)專門設(shè)置一個隊(duì)列會預(yù)先占用一定的集群資源漓骚,這就導(dǎo)致大任務(wù)的執(zhí)行時間會落后于使用FIFO調(diào)度器時的時間蝌衔。

在Fair調(diào)度器中榛泛,我們不需要預(yù)先占用一定的系統(tǒng)資源树姨,F(xiàn)air調(diào)度器會為所有運(yùn)行的job動態(tài)的調(diào)整系統(tǒng)資源曙痘。如下圖所示猾普,當(dāng)?shù)谝粋€大job提交時次舌,只有這一個job在運(yùn)行,此時它獲得了所有集群資源桩了;當(dāng)?shù)诙€小任務(wù)提交后秽晚,F(xiàn)air調(diào)度器會分配一半資源給這個小任務(wù)贪壳,讓這兩個任務(wù)公平的共享集群資源斥废。

需要注意的是椒楣,在下圖Fair調(diào)度器中,從第二個任務(wù)提交到獲得資源會有一定的延遲营袜,因?yàn)樗枰却谝粋€任務(wù)釋放占用的Container撒顿。小任務(wù)執(zhí)行完成之后也會釋放自己占用的資源丑罪,大任務(wù)又獲得了全部的系統(tǒng)資源荚板。最終的效果就是Fair調(diào)度器即得到了高的資源利用率又能保證小任務(wù)及時完成。

Yarn調(diào)度器對比圖:

二吩屹、Capacity Scheduler(容器調(diào)度器)的配置

2.1 容器調(diào)度介紹

Capacity 調(diào)度器允許多個組織共享整個集群跪另,每個組織可以獲得集群的一部分計算能力。通過為每個組織分配專門的隊(duì)列煤搜,然后再為每個隊(duì)列分配一定的集群資源免绿,這樣整個集群就可以通過設(shè)置多個隊(duì)列的方式給多個組織提供服務(wù)了。除此之外擦盾,隊(duì)列內(nèi)部又可以垂直劃分嘲驾,這樣一個組織內(nèi)部的多個成員就可以共享這個隊(duì)列資源了,在一個隊(duì)列內(nèi)部迹卢,資源的調(diào)度是采用的是先進(jìn)先出(FIFO)策略辽故。

通過上面那幅圖,我們已經(jīng)知道一個job可能使用不了整個隊(duì)列的資源腐碱。然而如果這個隊(duì)列中運(yùn)行多個job誊垢,如果這個隊(duì)列的資源夠用,那么就分配給這些job症见,如果這個隊(duì)列的資源不夠用了呢喂走?其實(shí)Capacity調(diào)度器仍可能分配額外的資源給這個隊(duì)列,這就是“彈性隊(duì)列”(queue elasticity)的概念谋作。

在正常的操作中芋肠,Capacity調(diào)度器不會強(qiáng)制釋放Container,當(dāng)一個隊(duì)列資源不夠用時遵蚜,這個隊(duì)列只能獲得其它隊(duì)列釋放后的Container資源帖池。當(dāng)然秒咐,我們可以為隊(duì)列設(shè)置一個最大資源使用量,以免這個隊(duì)列過多的占用空閑資源碘裕,導(dǎo)致其它隊(duì)列無法使用這些空閑資源携取,這就是”彈性隊(duì)列”需要權(quán)衡的地方。

2.2 容器調(diào)度的配置

假設(shè)我們有如下層次的隊(duì)列:

root

├── prod

└── dev

├── eng

└── science

下面是一個簡單的Capacity調(diào)度器的配置文件帮孔,文件名為capacity-scheduler.xml雷滋。在這個配置中,在root隊(duì)列下面定義了兩個子隊(duì)列prod和dev文兢,分別占40%和60%的容量晤斩。需要注意,一個隊(duì)列的配置是通過屬性yarn.sheduler.capacity..指定的姆坚,代表的是隊(duì)列的繼承樹澳泵,如root.prod隊(duì)列,一般指capacity和maximum-capacity兼呵。

我們可以看到兔辅,dev隊(duì)列又被分成了eng和science兩個相同容量的子隊(duì)列。dev的maximum-capacity屬性被設(shè)置成了75%击喂,所以即使prod隊(duì)列完全空閑dev也不會占用全部集群資源维苔,也就是說,prod隊(duì)列仍有25%的可用資源用來應(yīng)急懂昂。我們注意到介时,eng和science兩個隊(duì)列沒有設(shè)置maximum-capacity屬性,也就是說eng或science隊(duì)列中的job可能會用到整個dev隊(duì)列的所有資源(最多為集群的75%)凌彬。而類似的沸柔,prod由于沒有設(shè)置maximum-capacity屬性,它有可能會占用集群全部資源铲敛。

Capacity容器除了可以配置隊(duì)列及其容量外褐澎,我們還可以配置一個用戶或應(yīng)用可以分配的最大資源數(shù)量、可以同時運(yùn)行多少應(yīng)用原探、隊(duì)列的ACL認(rèn)證等乱凿。

2.3 隊(duì)列的設(shè)置

關(guān)于隊(duì)列的設(shè)置,這取決于我們具體的應(yīng)用咽弦。比如徒蟆,在MapReduce中,我們可以通過mapreduce.job.queuename屬性指定要用的隊(duì)列型型。如果隊(duì)列不存在段审,我們在提交任務(wù)時就會收到錯誤。如果我們沒有定義任何隊(duì)列闹蒜,所有的應(yīng)用將會放在一個default隊(duì)列中寺枉。

注意:對于Capacity調(diào)度器抑淫,我們的隊(duì)列名必須是隊(duì)列樹中的最后一部分,如果我們使用隊(duì)列樹則不會被識別姥闪。比如始苇,在上面配置中,我們使用prod和eng作為隊(duì)列名是可以的筐喳,但是如果我們用root.dev.eng或者dev.eng是無效的催式。

三、Fair Scheduler(公平調(diào)度器)的配置

3.1 公平調(diào)度

Fair調(diào)度器的設(shè)計目標(biāo)是為所有的應(yīng)用分配公平的資源(對公平的定義可以通過參數(shù)來設(shè)置)避归。在上面的“Yarn調(diào)度器對比圖”展示了一個隊(duì)列中兩個應(yīng)用的公平調(diào)度荣月;當(dāng)然,公平調(diào)度在也可以在多個隊(duì)列間工作梳毙。舉個例子哺窄,假設(shè)有兩個用戶A和B,他們分別擁有一個隊(duì)列账锹。當(dāng)A啟動一個job而B沒有任務(wù)時萌业,A會獲得全部集群資源;當(dāng)B啟動一個job后牌废,A的job會繼續(xù)運(yùn)行咽白,不過一會兒之后兩個任務(wù)會各自獲得一半的集群資源。如果此時B再啟動第二個job并且其它job還在運(yùn)行鸟缕,則它將會和B的第一個job共享B這個隊(duì)列的資源,也就是B的兩個job會用于四分之一的集群資源排抬,而A的job仍然用于集群一半的資源懂从,結(jié)果就是資源最終在兩個用戶之間平等的共享。過程如下圖所示:

3.2 啟用Fair Scheduler

調(diào)度器的使用是通過yarn-site.xml配置文件中的yarn.resourcemanager.scheduler.class參數(shù)進(jìn)行配置的蹲蒲,默認(rèn)采用Capacity Scheduler調(diào)度器番甩。如果我們要使用Fair調(diào)度器,需要在這個參數(shù)上配置FairScheduler類的全限定名:org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler届搁。

3.3 隊(duì)列的配置

Fair調(diào)度器的配置文件位于類路徑下的fair-scheduler.xml文件中缘薛,這個路徑可以通過yarn.scheduler.fair.allocation.file屬性進(jìn)行修改。若沒有這個配置文件卡睦,F(xiàn)air調(diào)度器采用的分配策略宴胧,這個策略和3.1節(jié)介紹的類似:調(diào)度器會在用戶提交第一個應(yīng)用時為其自動創(chuàng)建一個隊(duì)列,隊(duì)列的名字就是用戶名表锻,所有的應(yīng)用都會被分配到相應(yīng)的用戶隊(duì)列中恕齐。

我們可以在配置文件中配置每一個隊(duì)列,并且可以像Capacity 調(diào)度器一樣分層次配置隊(duì)列瞬逊。比如显歧,參考capacity-scheduler.xml來配置fair-scheduler:

隊(duì)列的層次是通過嵌套元素實(shí)現(xiàn)的仪或。所有的隊(duì)列都是root隊(duì)列的孩子,即使我們沒有配到元素里士骤。在這個配置中范删,我們把dev隊(duì)列有分成了eng和science兩個隊(duì)列。

Fair調(diào)度器中的隊(duì)列有一個權(quán)重屬性(這個權(quán)重就是對公平的定義)拷肌,并把這個屬性作為公平調(diào)度的依據(jù)瓶逃。在這個例子中,當(dāng)調(diào)度器分配集群40:60資源給prod和dev時便視作公平廓块,eng和science隊(duì)列沒有定義權(quán)重厢绝,則會被平均分配。這里的權(quán)重并不是百分比带猴,我們把上面的40和60分別替換成2和3昔汉,效果也是一樣的。注意拴清,對于在沒有配置文件時按用戶自動創(chuàng)建的隊(duì)列靶病,它們?nèi)杂袡?quán)重并且權(quán)重值為1。

每個隊(duì)列內(nèi)部仍可以有不同的調(diào)度策略口予。隊(duì)列的默認(rèn)調(diào)度策略可以通過頂級元素進(jìn)行配置娄周,如果沒有配置,默認(rèn)采用公平調(diào)度沪停。

盡管是Fair調(diào)度器煤辨,其仍支持在隊(duì)列級別進(jìn)行FIFO調(diào)度。每個隊(duì)列的調(diào)度策略可以被其內(nèi)部的元素覆蓋木张,在上面這個例子中众辨,prod隊(duì)列就被指定采用FIFO進(jìn)行調(diào)度,所以舷礼,對于提交到prod隊(duì)列的任務(wù)就可以按照FIFO規(guī)則順序的執(zhí)行了鹃彻。需要注意,prod和dev之間的調(diào)度仍然是公平調(diào)度妻献,同樣eng和science也是公平調(diào)度蛛株。

盡管上面的配置中沒有展示,每個隊(duì)列仍可配置最大育拨、最小資源占用數(shù)和最大可運(yùn)行的應(yīng)用的數(shù)量谨履。

3.4 隊(duì)列的設(shè)置

Fair調(diào)度器采用了一套基于規(guī)則的系統(tǒng)來確定應(yīng)用應(yīng)該放到哪個隊(duì)列。在上面的例子中至朗,元素定義了一個規(guī)則列表屉符,其中的每個規(guī)則會被逐個嘗試直到匹配成功。例如,上例第一個規(guī)則specified矗钟,則會把應(yīng)用放到它指定的隊(duì)列中唆香,若這個應(yīng)用沒有指定隊(duì)列名或隊(duì)列名不存在,則說明不匹配這個規(guī)則吨艇,然后嘗試下一個規(guī)則躬它。primaryGroup規(guī)則會嘗試把應(yīng)用放在以用戶所在的Unix組名命名的隊(duì)列中,如果沒有這個隊(duì)列东涡,不創(chuàng)建隊(duì)列轉(zhuǎn)而嘗試下一個規(guī)則冯吓。當(dāng)前面所有規(guī)則不滿足時,則觸發(fā)default規(guī)則疮跑,把應(yīng)用放在dev.eng隊(duì)列中组贺。

當(dāng)然,我們可以不配置queuePlacementPolicy規(guī)則祖娘,調(diào)度器則默認(rèn)采用如下規(guī)則:

上面規(guī)則可以歸結(jié)成一句話失尖,除非隊(duì)列被準(zhǔn)確的定義,否則會以用戶名為隊(duì)列名創(chuàng)建隊(duì)列渐苏。

還有一個簡單的配置策略可以使得所有的應(yīng)用放入同一個隊(duì)列(default)掀潮,這樣就可以讓所有應(yīng)用之間平等共享集群而不是在用戶之間。這個配置的定義如下:

實(shí)現(xiàn)上面功能我們還可以不使用配置文件琼富,直接設(shè)置yarn.scheduler.fair.user-as-default-queue=false仪吧,這樣應(yīng)用便會被放入default 隊(duì)列,而不是各個用戶名隊(duì)列鞠眉。另外薯鼠,我們還可以設(shè)置yarn.scheduler.fair.allow-undeclared-pools=false,這樣用戶就無法創(chuàng)建隊(duì)列了凡蚜。

3.5 搶占(Preemption)

當(dāng)一個job提交到一個繁忙集群中的空隊(duì)列時人断,job并不會馬上執(zhí)行,而是阻塞直到正在運(yùn)行的job釋放系統(tǒng)資源朝蜘。為了使提交job的執(zhí)行時間更具預(yù)測性(可以設(shè)置等待的超時時間),F(xiàn)air調(diào)度器支持搶占涩金。

搶占就是允許調(diào)度器殺掉占用超過其應(yīng)占份額資源隊(duì)列的containers谱醇,這些containers資源便可被分配到應(yīng)該享有這些份額資源的隊(duì)列中。需要注意搶占會降低集群的執(zhí)行效率步做,因?yàn)楸唤K止的containers需要被重新執(zhí)行副渴。

可以通過設(shè)置一個全局的參數(shù)yarn.scheduler.fair.preemption=true來啟用搶占功能。此外全度,還有兩個參數(shù)用來控制搶占的過期時間(這兩個參數(shù)默認(rèn)沒有配置煮剧,需要至少配置一個來允許搶占Container):

- minimum share preemption timeout

- fair share preemption timeout

如果隊(duì)列在minimum share preemption timeout指定的時間內(nèi)未獲得最小的資源保障,調(diào)度器就會搶占containers。我們可以通過配置文件中的頂級元素為所有隊(duì)列配置這個超時時間勉盅;我們還可以在元素內(nèi)配置元素來為某個隊(duì)列指定超時時間佑颇。

與之類似,如果隊(duì)列在fair share preemption timeout指定時間內(nèi)未獲得平等的資源的一半(這個比例可以配置)草娜,調(diào)度器則會進(jìn)行搶占containers挑胸。這個超時時間可以通過頂級元素和元素級元素分別配置所有隊(duì)列和某個隊(duì)列的超時時間。上面提到的比例可以通過(配置所有隊(duì)列)和(配置某個隊(duì)列)進(jìn)行配置宰闰,默認(rèn)是0.5茬贵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市移袍,隨后出現(xiàn)的幾起案子解藻,更是在濱河造成了極大的恐慌,老刑警劉巖葡盗,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螟左,死亡現(xiàn)場離奇詭異,居然都是意外死亡戳粒,警方通過查閱死者的電腦和手機(jī)路狮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔚约,“玉大人奄妨,你說我怎么就攤上這事∑凰睿” “怎么了砸抛?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長树枫。 經(jīng)常有香客問我直焙,道長,這世上最難降的妖魔是什么砂轻? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任奔誓,我火速辦了婚禮,結(jié)果婚禮上搔涝,老公的妹妹穿的比我還像新娘厨喂。我一直安慰自己,他們只是感情好庄呈,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布蜕煌。 她就那樣靜靜地躺著,像睡著了一般诬留。 火紅的嫁衣襯著肌膚如雪斜纪。 梳的紋絲不亂的頭發(fā)上贫母,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音盒刚,去河邊找鬼腺劣。 笑死,一個胖子當(dāng)著我的面吹牛伪冰,可吹牛的內(nèi)容都是我干的誓酒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼贮聂,長吁一口氣:“原來是場噩夢啊……” “哼靠柑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吓懈,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤歼冰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后耻警,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隔嫡,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年甘穿,在試婚紗的時候發(fā)現(xiàn)自己被綠了腮恩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡温兼,死狀恐怖秸滴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情募判,我是刑警寧澤荡含,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站届垫,受9級特大地震影響释液,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜装处,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一误债、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妄迁,春花似錦找前、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽项戴。三九已至形帮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辩撑。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工界斜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人合冀。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓各薇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親君躺。 傳聞我的和親對象是個殘疾皇子峭判,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

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