容量排程絕對值配置佇列使用與避坑

語言: CN / TW / HK

【概述】

在yarn中,對於容量排程而言,需要配置不同的佇列,併為佇列分配不同的資源。然而資源的配置是按照叢集總資源的百分比來的,那麼,如果叢集資源進行擴容,佇列的資源也就相應的增加了。在某些場景下, 我們可能希望某些佇列的資源是固定的,不隨叢集資源的擴縮容而變更,這就需要給佇列資源配置一個絕對值,在hadoop3.1.0版本中,開始引入了這個功能。本文就來聊聊如何給佇列配置絕對值資源,以及一些使用過程中的注意事項。

【配置使用】

配置絕對值資源的佇列其實很簡單,在原來配置百分比的地方,修改為資源的絕對值即可。例如:

<property>
  <name>yarn.scheduler.capacity.root.bigdata.capacity</name>
  <value>[vcores=60,memory=614400,yarn.io/gpu=0]</value>
</property>

這樣,配置的佇列就是固定的資源了。

【使用注意事項】

雖然配置比較簡單,使用方式和原來相比也沒有什麼變化,但還是有不少要注意的地方。

1. 根佇列下,佇列可建立的模式

在根佇列("/")下,可以同時建立型別為百分比、絕對值的子佇列。

2. 根佇列下,佇列的容量問題

在根佇列下,如果同時建立了百分比、絕對值方式的佇列,那麼對於百分比佇列而言,累加的百分比可以大於100%,但單個佇列的百分比值不能超過100%

同樣對於絕對值方式的佇列,所有佇列的資源總和同樣可以大於叢集的總資源,

但是,如果根佇列下只有百分比的佇列,那麼佇列累加的百分比之和還是和之前一樣,必須等於100對於絕對值的佇列,也是一樣的,非根佇列下的子佇列,其資源的總和可以大於等於父佇列的資源,但不能超過父佇列的資源

3. 子佇列的模式

前面說了根佇列下的佇列可以同時建立百分比、絕對值方式的佇列,而在非根佇列下的佇列,其型別就必須與父佇列保持一致,即如果父佇列是百分比的,那麼子佇列也只能是百分比;如果父佇列是按絕對值方式配置的,子佇列也只能以絕對值的方式進行配置,否則會報型別不匹配的錯誤,導致佇列重新整理失敗或rm啟動失敗,例如採用如下配置更新佇列:

<property>
  <name>yarn.scheduler.capacity.root.cloudstorage.capacity</name>
  <value>50</value>
</property>
<property>
  <name>yarn.scheduler.capacity.root.cloudstorage.queues</name>
  <value>ceph</value>
</property>
<property>
  <name>yarn.scheduler.capacity.root.cloudstorage.ceph.capacity</name>
  <value>[vcores=60,memory=614400,yarn.io/gpu=0]</value>
</property>

報錯資訊為:

4. 絕對值佇列下建立資源為0的子佇列型別問題

動態新增的某個佇列不需要了, 這個時候會將佇列的資源配置為0,並將佇列的狀態配置為STOPPED,以停用該佇列。

然而由於在絕對值模式的佇列下,建立的子佇列也只能是以絕對值的方式配置,如果此時將子佇列的值設定為0後,重新整理佇列會報佇列的型別與父佇列不匹配的錯誤。

即配置方式為[vcores=0,memory=0,yarn.io/gpu=0]的佇列,其型別認為是百分比的模式,父佇列如果是絕對值模式的, 那麼確實就出現了不匹配的報錯。

該問題實際上是一個bug,正確的方式是:配置為0資源的佇列其型別與父佇列相同。社群有對應的記錄,在未來的3.4.0中修復。具體可參考YARN-10364

5. 通過yarnClient獲取隊裡有效資源不正確

通過yarnclient的getEffectiveMinCapacity獲取的值與UI介面展示的值不相符,同樣這個也是原始碼中的BUG。賦值的時候搞錯了。

注意,當前這個問題僅在trunk分支上修復

以上這些就是使用過程中常見的需要注意的點,除此之外,還有幾個小的點,使用的場景也有限,這裡簡單羅列下,如有需要可詳細參考社群的jira單。

1)絕對值配置的佇列,maxApplications的值被覆蓋

https://issues.apache.org/jira/browse/YARN-10396

2)第三級佇列資源計算錯誤問題

https://issues.apache.org/jira/browse/YARN-8917

【總結】

文章就總結到這裡了,看完之後是否還記得應該如何給佇列配置絕對值資源,以及使用中有哪些需要注意的地方。此外,是否也還留有一些疑惑的地方,比如root佇列下,多個絕對值配置的佇列的總資源超過了叢集資源,那麼該佇列使用時實際能佔用多少資源,具體是如何計算的等等,這就作為下篇文章的內容,我們下次再聊。

 

好了,這就是本文的全部內容,如果覺得本文對您有幫助,不要吝嗇點贊在看轉發,也歡迎加我微信交流~

 

本文分享自微信公眾號 - hncscwc(gh_383bc7486c1a)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。