這篇文章主要講解了“hadoop Yarn調(diào)度器Scheduler的特點(diǎn)是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“hadoop Yarn調(diào)度器Scheduler的特點(diǎn)是什么”吧!
創(chuàng)新互聯(lián)一直通過(guò)網(wǎng)站建設(shè)和網(wǎng)站營(yíng)銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以網(wǎng)站制作、成都做網(wǎng)站、移動(dòng)互聯(lián)產(chǎn)品、營(yíng)銷型網(wǎng)站建設(shè)服務(wù)為核心業(yè)務(wù)。10多年網(wǎng)站制作的經(jīng)驗(yàn),使用新網(wǎng)站建設(shè)技術(shù),全新開(kāi)發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價(jià)格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡(jiǎn)單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。
集群資源是非常有限的,在多用戶、多任務(wù)環(huán)境下,需要有一個(gè)協(xié)調(diào)者,來(lái)保證在有限資源或業(yè)務(wù)約束下有序調(diào)度任務(wù),YARN資源調(diào)度器就是這個(gè)協(xié)調(diào)者。
YARN調(diào)度器有多種實(shí)現(xiàn),自帶的調(diào)度器為Capacity Scheduler和Fair Scheduler。YARN資源調(diào)度器均實(shí)現(xiàn)Resource Scheduler接口,是一個(gè)插拔式組件,用戶可以通過(guò)配置參數(shù)來(lái)使用不同的調(diào)度器,也可以自己按照接口規(guī)范編寫(xiě)新的資源調(diào)度器。默認(rèn)情況下,YARN采用的是Capacity Scheduler調(diào)度器。
Capacity Scheduler(計(jì)算能力調(diào)度器)是由Yahoo貢獻(xiàn)的,主要是解決HADOOP-3421中提出的,在調(diào)度器上完成HOD(Hadoop On Demand)功能,克服已有HOD的性能低效的缺點(diǎn)。它適合于多用戶共享集群的環(huán)境的調(diào)度器。在多用戶的情況下,達(dá)到最大化集群的吞吐和利用率的目的。
Capacity 調(diào)度器允許多個(gè)組織共享整個(gè)集群,每個(gè)組織可以獲得集群的一部分計(jì)算能力。通過(guò)為每個(gè)組織分配專門的隊(duì)列,然后再為每個(gè)隊(duì)列分配一定的集群資源,這樣整個(gè)集群就可以通過(guò)設(shè)置多個(gè)隊(duì)列的方式給多個(gè)組織提供服務(wù)了。除此之外,隊(duì)列內(nèi)部又可以垂直劃分,這樣一個(gè)組織內(nèi)部的多個(gè)成員就可以共享這個(gè)隊(duì)列資源了,在一個(gè)隊(duì)列內(nèi)部,資源的調(diào)度是采用的是先進(jìn)先出(FIFO)策略。
一個(gè)job可能使用不了整個(gè)隊(duì)列的資源。然而如果這個(gè)隊(duì)列中運(yùn)行多個(gè)job,如果這個(gè)隊(duì)列的資源夠用,那么就分配給這些job,如果這個(gè)隊(duì)列的資源不夠用了呢?其實(shí)Capacity調(diào)度器仍可能分配額外的資源給這個(gè)隊(duì)列,這就是彈性隊(duì)列(queue elasticity)的概念。
在正常的操作中,Capacity調(diào)度器不會(huì)強(qiáng)制釋放Container,當(dāng)一個(gè)隊(duì)列資源不夠用時(shí),這個(gè)隊(duì)列只能獲得其它隊(duì)列釋放后的Container資源。當(dāng)然,我們可以為隊(duì)列設(shè)置一個(gè)最大資源使用量,以免這個(gè)隊(duì)列過(guò)多的占用空閑資源,導(dǎo)致其它隊(duì)列無(wú)法使用這些空閑資源,這就是彈性隊(duì)列需要權(quán)衡的地方。
容量保證:每個(gè)隊(duì)列都分配了一部分容量,他們可以支配著部分資源。提交到特定隊(duì)列的應(yīng)用程序,可以使用該隊(duì)列的資源。管理員可以配置每個(gè)隊(duì)列容量的最低保證和資源使用上限。
安全性:每個(gè)隊(duì)列都有嚴(yán)格的ACL(控制訪問(wèn)列表),它可以控制用戶提交應(yīng)用程序到特定隊(duì)列上。同時(shí)保證用戶不能查看或修改其它用戶提交的應(yīng)用程序,并且隊(duì)列管理員和集群系統(tǒng)管理員可以對(duì)其進(jìn)行維護(hù)。
靈活性:隊(duì)列的空閑資源可以分配各其它隊(duì)列使用。如果某隊(duì)列的資源分配未達(dá)到隊(duì)列資源使用上限,在其需要更多資源時(shí),將分配其它隊(duì)列的空閑資源給該繁忙隊(duì)列。
多用戶性:支持多用戶共享集群,一些列的綜合設(shè)置可以防止單個(gè)應(yīng)用程序、用戶或隊(duì)列獨(dú)占隊(duì)里或集群的全部資源。
可操作性:支持運(yùn)行時(shí)配置和隊(duì)列停止。隊(duì)列的屬性(例如:資源容量分配、ACL等)可以在運(yùn)行時(shí)由管理員以一種安全的方式更改,從而減少了對(duì)用戶的影響。同時(shí)提供給管理員和用戶一個(gè)界面,用于查看當(dāng)前隊(duì)列資源的使用情況。管理員可以在集群運(yùn)行時(shí)添加新隊(duì)列,可以在停止運(yùn)行的隊(duì)列的同時(shí)保證隊(duì)列上的任務(wù)運(yùn)行完成,而新的任務(wù)不能提交到該隊(duì)列上。注意現(xiàn)在不支持在運(yùn)行時(shí)刪除隊(duì)列,如果需要?jiǎng)h除隊(duì)列,需要重啟集群。
層級(jí)隊(duì)列:層級(jí)隊(duì)列可確保資源在該組織的子隊(duì)列之間被共享,從而提供更多的可控制性和預(yù)測(cè)性。
基于資源的調(diào)度:支持資源密集型的應(yīng)用程序,允許應(yīng)用程序使用的資源量高于默認(rèn)值,從而該調(diào)度器可以支持不同資源需求的應(yīng)用程序。目前只支持內(nèi)存資源的配置,通過(guò)配置可支持CPU資源。
Fair Scheduler是由Facebook貢獻(xiàn)的,是Hadoop上一個(gè)可插拔式的調(diào)度器,允許YARN應(yīng)用程序在一個(gè)大的集群上公平地共享資源。
公平調(diào)度是一種為應(yīng)用程序分配資源的方法,多用戶的情況下,強(qiáng)調(diào)用戶公平地使用資源。默認(rèn)情況下Fair Scheduler根據(jù)內(nèi)存資源對(duì)應(yīng)用程序進(jìn)行公平調(diào)度,通過(guò)配置可以修改為根據(jù)內(nèi)存和CPU兩種資源進(jìn)行調(diào)度。當(dāng)集群中只有一個(gè)應(yīng)用程序運(yùn)行時(shí),那么此應(yīng)用程序占用這個(gè)集群資源。當(dāng)其他的應(yīng)用程序提交后,那些釋放的資源將會(huì)被分配給新的應(yīng)用程序,所以每個(gè)應(yīng)用程序最終都能獲取幾乎一樣多的資源。
在Fair Scheduler中,不需要預(yù)先占用一定的系統(tǒng)資源,F(xiàn)air Scheduler會(huì)動(dòng)態(tài)調(diào)整應(yīng)用程序的資源分配。例如,當(dāng)?shù)谝粋€(gè)大job提交時(shí),只有這一個(gè)job在運(yùn)行,此時(shí)它獲得了所有集群資源;當(dāng)?shù)诙€(gè)小任務(wù)提交后,F(xiàn)air調(diào)度器會(huì)分配一半資源給這個(gè)小任務(wù),讓這兩個(gè)任務(wù)公平的共享集群資源。
需要注意的是,在下圖Fair Scheduler中,從第二個(gè)任務(wù)提交到獲得資源會(huì)有一定的延遲,因?yàn)樗枰却谝粋€(gè)任務(wù)釋放占用的Container。小任務(wù)執(zhí)行完成之后也會(huì)釋放自己占用的資源,大任務(wù)又獲得了全部的系統(tǒng)資源。
Fair Scheduler將應(yīng)用程序支持以隊(duì)列的方式組織,這些隊(duì)列之間公平的共享資源。默認(rèn),所有的用戶共享一個(gè)隊(duì)列。如果應(yīng)用程序在請(qǐng)求資源時(shí)指定了隊(duì)列,那么請(qǐng)求將會(huì)被提交到指定的隊(duì)列中。也可以通過(guò)配置,根據(jù)用戶名稱來(lái)分配隊(duì)列。在每個(gè)隊(duì)列內(nèi)部,應(yīng)用程序基于內(nèi)存公平共享或FIFO共享資源。
舉個(gè)例子,假設(shè)有兩個(gè)用戶A和B,他們分別擁有一個(gè)隊(duì)列。當(dāng)A啟動(dòng)一個(gè)job而B(niǎo)沒(méi)有任務(wù)時(shí),A會(huì)獲得全部集群資源;當(dāng)B啟動(dòng)一個(gè)job后,A的job會(huì)繼續(xù)運(yùn)行,不過(guò)一會(huì)兒之后兩個(gè)任務(wù)會(huì)各自獲得一半的集群資源。如果此時(shí)B再啟動(dòng)第二個(gè)job并且其它job還在運(yùn)行,則它將會(huì)和B的第一個(gè)job共享B這個(gè)隊(duì)列的資源,也就是B的兩個(gè)job會(huì)用于四分之一的集群資源,而A的job仍然用于集群一半的資源,結(jié)果就是資源最終在兩個(gè)用戶之間平等的共享。過(guò)程如下圖所示:
Fair Scheduler允許為隊(duì)列分配擔(dān)最小的共享資源量,這樣可以保證某些用戶、groups或者應(yīng)用程序總能獲取充足的資源。當(dāng)一個(gè)隊(duì)列中有正在運(yùn)行的應(yīng)用程序時(shí),它至少能夠獲取設(shè)置的最小資源,當(dāng)隊(duì)列中無(wú)任務(wù)時(shí),它的資源將會(huì)被拆分給其他運(yùn)行中的任務(wù)。
Fair Scheudler在默認(rèn)情況下允許所有的任務(wù)運(yùn)行,但是這也可以通過(guò)配置文件來(lái)限制每個(gè)用戶下和每個(gè)隊(duì)列下運(yùn)行的任務(wù)個(gè)數(shù)。處于限制時(shí),新提交的任務(wù)不會(huì)提交失敗,而是在Scheduler queue中等待,直到先前的任務(wù)結(jié)束,再執(zhí)行。
相同點(diǎn)
都支持多用戶多隊(duì)列,即:適用于多用戶共享集群的應(yīng)用環(huán)境
都支持層級(jí)隊(duì)列
支持配置動(dòng)態(tài)修改,更好的保證了集群的穩(wěn)定運(yùn)行。
均支持資源共享,即某個(gè)隊(duì)列中的資源有剩余時(shí),可共享給其他缺資源的隊(duì)列
單個(gè)隊(duì)列均支持優(yōu)先級(jí)和FIFO調(diào)度方式
不同點(diǎn)
Capacity Scheduler與Fair Scheduler最大的區(qū)別為調(diào)度策略的不同
Capacity Scheduler的調(diào)度策略是,可以先選擇資源利用率低的隊(duì)列,然后在隊(duì)列中通過(guò)FIFO或DRF進(jìn)行調(diào)度。
Fair Scheduler的調(diào)度策略是,可以使用公平排序算法選擇隊(duì)列,然后再隊(duì)列中通過(guò)Fair(默認(rèn))、FIFO或DRF的方式進(jìn)行調(diào)度。
感謝各位的閱讀,以上就是“hadoop Yarn調(diào)度器Scheduler的特點(diǎn)是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)hadoop Yarn調(diào)度器Scheduler的特點(diǎn)是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!