目前,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):單隊列,根據送出作業的先後順序,先來先服務。
優點:簡單易懂。
缺點:不支援多隊列,生産環境很少使用。
二、容量排程器(Capacity Scheduler)
Capacity Scheduler是Yahoo開發的多使用者排程器。
1. 容量排程器特點
多隊列:每個隊列可配置一定的資源量,每個隊列采用FIFO排程政策。
容量保證:管理者可為每個隊列設定資源最低保證和資源使用上限。
靈活性:如果一個隊列中的資源有剩餘,可以暫時共享給那些需要資源的隊列,而一旦該隊列有新的應用程式送出,則其他隊列借調的資源會歸還給該隊列。
多租戶:支援多使用者共享叢集和多應用程式同時運作。
為了防止同一個使用者的作業獨占隊列中的資源,該排程器會對同一使用者送出的作業所占資源量進行限定。
2. 容量排程器資源配置設定算法
1)隊列資源配置設定
從root開始,使用深度優先算法,優先選擇資源占用率最低的隊列配置設定資源。
2)作業資源配置設定
預設按照送出作業的優先級和送出時間順序配置設定資源。
3)容器資源配置設定
按照容器的優先級配置設定資源;
如果優先級相同,按照資料本地性原則:
- 任務和資料在同一節點
- 任務和資料在同一機架
- 任務和資料不在同一節點也不在同一機架
三、公平排程器(Fair Scheduler)
Fair Schedulere是Facebook開發的多使用者排程器。
1. 與容量排程器相同點
(1)多隊列:支援多隊列多作業。
(2)容量保證:管理者可為每個隊列設定資源最低保證和資源使用上線。
(3)靈活性:如果一個隊列中的資源有剩餘,可以暫時共享給那些需要資源的隊列,而一旦該隊列有新的應用程式送出,則其他隊列借調的資源會歸還給該隊列。
(4)多租戶:支援多使用者共享叢集和多應用程式同時運作;為了防止同一個使用者的作業獨占隊列中的資源,該排程器會對同一使用者送出的作業所占資源量進行限定。
2. 與容量排程器不同點
(1)核心排程政策不同
容量排程器:優先選擇資源使用率低的隊列
公平排程器:優先選擇對資源的缺額比例大的
(2)每個隊列可以單獨設定資源配置設定方式
容量排程器:FIFO、DRF
公平排程器:FIFO、FAIR、DRF
3. 公平排程器設計目标
在時間尺度上,所有作業獲得公平的資源。某一時刻一個作業應獲資源和實際擷取資源的差距叫“缺額”。
排程器會優先為缺額大的作業配置設定資源
4. 公平排程器隊列資源配置設定方式
1)FIFO政策
公平排程器每個隊列資源配置設定政策如果選擇FIFO的話,此時公平排程器相當于上面講過的容量排程器。
2)Fair政策
Fair 政策(預設)是一種基于最大最小公平算法實作的資源多路複用方式,預設情況下,每個隊列内部采用該方式配置設定資源。這意味着,如果一個隊列中有兩個應用程式同時運作,則每個應用程式可得到1/2的資源;如果三個應用程式同時運作,則每個應用程式可得到1/3的資源。
具體資源配置設定流程和容量排程器一緻;
(1)選擇隊列
(2)選擇作業
(3)選擇容器
以上三步,每一步都是按照公平政策配置設定資源
實際最小資源份額:mindshare = Min(資源需求量,配置的最小資源)
是否饑餓:isNeedy = 資源使用量 < mindshare(實際最小資源份額)
資源配置設定比:minShareRatio = 資源使用量 / Max(mindshare, 1)
資源使用權重比:useToWeightRatio = 資源使用量 / 權重
(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到了嗎?