yarn的Scheduler

yarn的Scheduler

調度器

先進先出調度

hadoop1.x使用的默認調度器就是FIFO。FIFO採用隊列方式將一個一個job任務按照時間先後順序進行服務。比如排在最前面的job需要若干maptask和若干reducetask,當發現有空閒的服務器節點就分配給這個job,直到job執行完畢。

公平調度

公平調度器按資源池(pool)來組織作業,並把資源公平的分到這些資源池裏。默認情況下,每一個用戶擁有一個獨立的資源池,以使每個用戶都能獲得一份等同的集羣資源而不管他們提交了多少作業。按用戶的 Unix 羣組或作業配置(jobconf)屬性來設置作業的資源池也是可以的。在每一個資源池內,會使用公平共享(fair sharing)的方法在運行作業之間共享容量(capacity)。用戶也可以給予資源池相應的權重,以不按比例的方式共享集羣。
除了提供公平共享方法外,公平調度器允許賦給資源池保證(guaranteed)最小共享資源,這個用在確保特定用戶、羣組或生產應用程序總能獲取到足夠的資源時是很有用的。當一個資源池包含作業時,它至少能獲取到它的最小共享資源,但是當資源池不完全需要它所擁有的保證共享資源時,額外的部分會在其它資源池間進行切分。
主要特點如下:
Ø 支持多用戶多隊列
Ø 資源公平共享(公平共享量由優先級決定)
Ø 保證最小共享量
Ø 支持時間片搶佔
Ø 限製作業併發量,以防止中間數據塞滿磁盤

容量調度

hadoop2.x使用的默認調度器是Capacity Scheduler。

子隊列不能直接繼承父隊列屬性 隊列配置成功以後要綁定調度 隊列超出最多100%

容量調度的特點

層次化的隊列:隊列的層次化確保了子隊列能夠先於其它隊列共享資源,這提供了更多對共享資源的控制和可預測性。
容量保證:隊列將被分配一定額度的容量,這樣所有提交到該隊列的應用將訪問分配給該隊列的容量,管理員可以爲每個隊列分配的容量設置soft限制和可選的hard限制。
安全性:每個隊列都有嚴格的ACL控制着哪個用戶可以向隊列提交應用程序,還有防護措施以保證用戶不能查看或者修改其他用戶的應用,最後還支持隊列管理員角色。
靈活性:空閒的資源可以分配給任何隊列,即使超出了該隊列所能夠分配的容量。假設有一個隊列在將來的某個時刻請求這些空閒的資源,一旦被調度使用這些資源的任務完成後,這些資源將被分配給請求對列。這確保了資源以可預測和靈活的方式隊列使用。
多租戶:hadoop提供了全方位的設置阻止單一應用、用戶和隊列獨佔隊列或集羣的資源以確保集羣不會不堪重負。
可操作性:管理員可以在運行時安全地修改隊列的定義和諸如容量、ACL等屬性,並將對用戶的影響降到最低。管理員還可以在運行時增加隊列,但不可以在運行時刪除隊列。用戶和管理員還可以通過控制檯查看當前分配給各個隊列的資源。管理員可以在運行時停止隊列以確保正在退出的應用在完成退出前,新的應用程序不能夠提交到該隊列。如果隊列處於STOPPED狀態,新應用程序不能夠被提交到該隊列及其子隊列,正在退出的應用繼續完成退出過程。管理員還可以啓動已經停止的對列。
基於資源的調度:支持資源密集的應用程序,應用程序可指定高於默認值的資源需求,這樣應用程序可以有不同的資源需求。當前只支持內存和虛擬CPU內核等資源的設置。

配置

首先配置yarn-site.xml

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

在Capacity Scheduler專屬配置文件capacity-scheduler.xml

<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>queuea,queueb</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.queuea.queues</name>
<value>queuea1,queuea2</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.queueb.queues</name>
<value>queueb1,queueb2,queueb3</value>
</property>

配置容量調度的屬性

  • yarn.scheduler.capacity…capacity

它是隊列的資源容量佔比(百分比)。系統繁忙時,每個隊列都應該得到設置的量的資源;當系統空閒時,該隊列的資源則可以被其他的隊列使用。同一層的所有隊列加起來必須是100%。

  • yarn.scheduler.capacity…maximum-capacity

隊列資源的使用上限。由於系統空閒時,隊列可以使用其他的空閒資源,因此最多使用的資源量則是該參數控制。默認是-1,即禁用。

  • yarn.scheduler.capacity…minimum-user-limit-percent

每個任務佔用的最少資源。比如,你設置成了25%。那麼如果有兩個用戶提交任務,那麼每個任務資源不超過50%。如果3個用戶提交任務,那麼每個任務資源不超過33%。如果4個用戶提交任務,那麼每個任務資源不超過25%。如果5個用戶提交任務,那麼第五個用戶需要等待才能提交。默認是100,即不去做限制。

  • yarn.scheduler.capacity…user-limit-factor

每個用戶最多使用的隊列資源佔比,如果設置爲50.那麼每個用戶使用的資源最多就是50%。

發佈了44 篇原創文章 · 獲贊 6 · 訪問量 2038
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章