yarn默認(rèn)使用的是最簡(jiǎn)單的FIFO調(diào)度器,即一個(gè)default隊(duì)列,所有用戶共享,分配資源也是先到先得,沒(méi)有優(yōu)先級(jí)之分。有時(shí)一兩個(gè)任務(wù)就把資源全占了,其他任務(wù)吃不到資源造成饑餓,顯然這樣的資源分配是不合理的(在當(dāng)今社會(huì)主義之中,我們要共同富裕?。?。yarn還有兩種資源調(diào)度器,capacity schedule和fair schedule,本文主要研究下capacity schedule。

什么是capacity schedule

Capacity Schedule調(diào)度器以隊(duì)列為單位劃分資源。簡(jiǎn)單通俗點(diǎn)來(lái)說(shuō),就是一個(gè)個(gè)隊(duì)列有獨(dú)立的資源,隊(duì)列的結(jié)構(gòu)和資源是可以進(jìn)行配置的,如下圖:
平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

default隊(duì)列占30%資源,analyst和dev分別占40%和30%資源;類似的,analyst和dev各有兩個(gè)子隊(duì)列,子隊(duì)列在父隊(duì)列的基礎(chǔ)上再分配資源。

隊(duì)列以分層方式組織資源,設(shè)計(jì)了多層級(jí)別的資源限制條件以更好的讓多用戶共享一個(gè)Hadoop集群,比如隊(duì)列資源限制、用戶資源限制、用戶應(yīng)用程序數(shù)目限制。隊(duì)列里的應(yīng)用以FIFO方式調(diào)度,每個(gè)隊(duì)列可設(shè)定一定比例的資源最低保證和使用上限,同時(shí),每個(gè)用戶也可以設(shè)定一定的資源使用上限以防止資源濫用。而當(dāng)一個(gè)隊(duì)列的資源有剩余時(shí),可暫時(shí)將剩余資源共享給其他隊(duì)列。

特性

Capacity調(diào)度器具有以下的幾個(gè)特性:
● 層次化的隊(duì)列設(shè)計(jì),這種層次化的隊(duì)列設(shè)計(jì)保證了子隊(duì)列可以使用父隊(duì)列設(shè)置的全部資源。這樣通過(guò)層次化的管理,更容易合理分配和限制資源的使用。
● 容量保證,隊(duì)列上都會(huì)設(shè)置一個(gè)資源的占比,這樣可以保證每個(gè)隊(duì)列都不會(huì)占用整個(gè)集群的資源。
● 安全,每個(gè)隊(duì)列又嚴(yán)格的訪問(wèn)控制。用戶只能向自己的隊(duì)列里面提交任務(wù),而且不能修改或者訪問(wèn)其他隊(duì)列的任務(wù)。
● 彈性分配,空閑的資源可以被分配給任何隊(duì)列。當(dāng)多個(gè)隊(duì)列出現(xiàn)爭(zhēng)用的時(shí)候,則會(huì)按照比例進(jìn)行平衡。
● 多租戶租用,通過(guò)隊(duì)列的容量限制,多個(gè)用戶就可以共享同一個(gè)集群,同時(shí)保證每個(gè)隊(duì)列分配到自己的容量,提高利用率。
● 操作性,yarn支持動(dòng)態(tài)修改調(diào)整容量、權(quán)限等的分配,可以在運(yùn)行時(shí)直接修改。還提供給管理員界面,來(lái)顯示當(dāng)前的隊(duì)列狀況。管理員可以在運(yùn)行時(shí),添加一個(gè)隊(duì)列;但是不能刪除一個(gè)隊(duì)列。管理員還可以在運(yùn)行時(shí)暫停某個(gè)隊(duì)列,這樣可以保證當(dāng)前的隊(duì)列在執(zhí)行過(guò)程中,集群不會(huì)接收其他的任務(wù)。如果一個(gè)隊(duì)列被設(shè)置成了stopped,那么就不能向他或者子隊(duì)列上提交任務(wù)了。
● 基于資源的調(diào)度,協(xié)調(diào)不同資源需求的應(yīng)用程序,比如內(nèi)存、CPU、磁盤等等。

配置

開啟調(diào)度器

在ResourceManager中配置它要使用的調(diào)度器,配置方式是修改conf/yarn-site.xml,設(shè)置屬性:

<property>
    <name>yarn.resourcemanager.scheduler.class</name>   
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value></property>

配置隊(duì)列

調(diào)度器的核心就是隊(duì)列的分配和使用了,修改conf/capacity-scheduler.xml可以配置隊(duì)列。
Capacity調(diào)度器默認(rèn)有一個(gè)預(yù)定義的隊(duì)列——root,所有的隊(duì)列都是它的子隊(duì)列。隊(duì)列的分配支持層次化的配置,使用.來(lái)進(jìn)行分割,比如yarn.scheduler.c

網(wǎng)友評(píng)論