天天看點

三分鐘速懂大資料技術之Yarn排程器與排程算法

作者:尚矽谷教育

目前,Hadoop作業排程器主要有三種:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。Apache Hadoop3.1.3預設的資源排程器是Capacity Scheduler。CDH架構預設排程器是Fair Scheduler。具體設定詳見:yarn-default.xml檔案

<property>

<description>The class to use as the resource scheduler.</description>

<name>yarn.resourcemanager.scheduler.class</name>

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

</property>

一、先進先出排程器(FIFO)

FIFO排程器(First In First Out):單隊列,根據送出作業的先後順序,先來先服務。

三分鐘速懂大資料技術之Yarn排程器與排程算法

優點:簡單易懂。

缺點:不支援多隊列,生産環境很少使用。

二、容量排程器(Capacity Scheduler)

Capacity Scheduler是Yahoo開發的多使用者排程器。

三分鐘速懂大資料技術之Yarn排程器與排程算法

1. 容量排程器特點

多隊列:每個隊列可配置一定的資源量,每個隊列采用FIFO排程政策。

容量保證:管理者可為每個隊列設定資源最低保證和資源使用上限。

靈活性:如果一個隊列中的資源有剩餘,可以暫時共享給那些需要資源的隊列,而一旦該隊列有新的應用程式送出,則其他隊列借調的資源會歸還給該隊列。

多租戶:支援多使用者共享叢集和多應用程式同時運作。

為了防止同一個使用者的作業獨占隊列中的資源,該排程器會對同一使用者送出的作業所占資源量進行限定。

三分鐘速懂大資料技術之Yarn排程器與排程算法

2. 容量排程器資源配置設定算法

1)隊列資源配置設定

從root開始,使用深度優先算法,優先選擇資源占用率最低的隊列配置設定資源。

2)作業資源配置設定

預設按照送出作業的優先級和送出時間順序配置設定資源。

3)容器資源配置設定

按照容器的優先級配置設定資源;

如果優先級相同,按照資料本地性原則:

  • 任務和資料在同一節點
  • 任務和資料在同一機架
  • 任務和資料不在同一節點也不在同一機架

三、公平排程器(Fair Scheduler)

Fair Schedulere是Facebook開發的多使用者排程器。

三分鐘速懂大資料技術之Yarn排程器與排程算法

1. 與容量排程器相同點

(1)多隊列:支援多隊列多作業。

(2)容量保證:管理者可為每個隊列設定資源最低保證和資源使用上線。

(3)靈活性:如果一個隊列中的資源有剩餘,可以暫時共享給那些需要資源的隊列,而一旦該隊列有新的應用程式送出,則其他隊列借調的資源會歸還給該隊列。

(4)多租戶:支援多使用者共享叢集和多應用程式同時運作;為了防止同一個使用者的作業獨占隊列中的資源,該排程器會對同一使用者送出的作業所占資源量進行限定。

2. 與容量排程器不同點

(1)核心排程政策不同

容量排程器:優先選擇資源使用率低的隊列

公平排程器:優先選擇對資源的缺額比例大的

(2)每個隊列可以單獨設定資源配置設定方式

容量排程器:FIFO、DRF

公平排程器:FIFO、FAIR、DRF

三分鐘速懂大資料技術之Yarn排程器與排程算法

3. 公平排程器設計目标

在時間尺度上,所有作業獲得公平的資源。某一時刻一個作業應獲資源和實際擷取資源的差距叫“缺額”。

排程器會優先為缺額大的作業配置設定資源

4. 公平排程器隊列資源配置設定方式

1)FIFO政策

公平排程器每個隊列資源配置設定政策如果選擇FIFO的話,此時公平排程器相當于上面講過的容量排程器。

2)Fair政策

Fair 政策(預設)是一種基于最大最小公平算法實作的資源多路複用方式,預設情況下,每個隊列内部采用該方式配置設定資源。這意味着,如果一個隊列中有兩個應用程式同時運作,則每個應用程式可得到1/2的資源;如果三個應用程式同時運作,則每個應用程式可得到1/3的資源。

具體資源配置設定流程和容量排程器一緻;

(1)選擇隊列

(2)選擇作業

(3)選擇容器

以上三步,每一步都是按照公平政策配置設定資源

實際最小資源份額:mindshare = Min(資源需求量,配置的最小資源)

是否饑餓:isNeedy = 資源使用量 < mindshare(實際最小資源份額)

資源配置設定比:minShareRatio = 資源使用量 / Max(mindshare, 1)

資源使用權重比:useToWeightRatio = 資源使用量 / 權重

三分鐘速懂大資料技術之Yarn排程器與排程算法
三分鐘速懂大資料技術之Yarn排程器與排程算法

(1)隊列資源配置設定

需求:叢集總資源100,有三個隊列,對資源的需求分别是:

queueA -> 20, queueB ->50, queueC -> 30

第一次算:100 / 3 = 33.33

queueA:分33.33 à 多13.33

queueB:分33.33 à 少16.67

queueC:分33.33 à 多3.33

第二次算:(13.33 + 3.33)/ 1 = 16.66

queueA:分20

queueB:分33.33 + 16.66 = 50

queueC:分30

公平排程器隊列資源配置設定方式

(2)作業資源配置設定

(a)不權重(關注點是Job的個數):

需求:有一條隊列總資源12個, 有4個job,對資源的需求分别是:

job1->1, job2->2 , job3->6, job4->5

第一次算: 12 / 4 = 3

job1: 分3 --> 多2個

job2: 分3 --> 多1個

job3: 分3 --> 差3個

job4: 分3 --> 差2個

第二次算: 3 / 2 = 1.5

job1: 分1

job2: 分2

job3: 分3 --> 差3個 --> 分1.5 --> 最終: 4.5

job4: 分3 --> 差2個 --> 分1.5 --> 最終: 4.5

第n次算: 一直算到沒有空閑資源

(b)權重(關注點是Job的權重):

需求:有一條隊列總資源16,有4個job

對資源的需求分别是:

job1->4 job2->2 job3->10 job4->4

每個job的權重為:

job1->5 job2->8 job3->1 job4->2

第一次算: 16 / (5+8+1+2) = 1

job1: 分5 --> 多1

job2: 分8 --> 多6

job3: 分1 --> 少9

job4: 分2 --> 少2

第二次算: 7 / (1+2) = 7/3

job1: 分4

job2: 分2

job3: 分1 --> 分7/3(2.33) -->少6.67

job4: 分2 --> 分14/3(4.66) -->多2.66

第三次算:2.66/1=2.66

job1: 分4

job2: 分2

job3: 分3.33 --> 分2.66/1 --> 分6

job4: 分4

第n次算: 一直算到沒有空閑資源

3)DRF政策

DRF(Dominant Resource Fairness),我們之前說的資源,都是單一标準,例如隻考慮記憶體(也是Yarn預設的情況)。但是很多時候我們資源有很多種,例如記憶體,CPU,網絡帶寬等,這樣我們很難衡量兩個應用應該配置設定的資源比例。

那麼在YARN中,我們用DRF來決定如何排程:

假設叢集一共有100 CPU和10T 記憶體,而應用A需要(2 CPU, 300GB),應用B需要(6 CPU,100GB)。則兩個應用分别需要A(2%CPU, 3%記憶體)和B(6%CPU, 1%記憶體)的資源,這就意味着A是記憶體主導的, B是CPU主導的,針對這種情況,我們可以選擇DRF政策對不同應用進行不同資源(CPU和記憶體)的一個不同比例的限制。

四、總結

通過以上,我們知道Yarn提供了多種排程器和可配置的政策供我們選擇,FIFO、容量和公平,今天的大資料技術你Get到了嗎?

繼續閱讀