yarn默認使用的是最簡單的FIFO調度器,即一個default隊列,所有用戶共享,分配資源也是先到先得,沒有優(yōu)先級之分。有時一兩個任務就把資源全占了,其他任務吃不到資源造成饑餓,顯然這樣的資源分配是不合理的(在當今社會主義之中,我們要共同富裕?。arn還有兩種資源調度器,capacity schedule和fair schedule,本文主要研究下capacity schedule。

什么是capacity schedule

Capacity Schedule調度器以隊列為單位劃分資源。簡單通俗點來說,就是一個個隊列有獨立的資源,隊列的結構和資源是可以進行配置的,如下圖:
平面設計培訓,網頁設計培訓,美工培訓,游戲開發(fā),動畫培訓

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

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

特性

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

配置

開啟調度器

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

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

配置隊列

調度器的核心就是隊列的分配和使用了,修改conf/capacity-scheduler.xml可以配置隊列。
Capacity調度器默認有一個預定義的隊列——root,所有的隊列都是它的子隊列。隊列的分配支持層次化的配置,使用.來進行分割,比如yarn.scheduler.c

網友評論