CDH| Yarn資源隊列划分管理


 

Yarn用戶資源隔離配置,主要使用 Yarn動態資源池(dynamic resource pool) _ 對YARN應用程序進行資源和策略分配的池。(Impala資源也可以動態管理)_
動態資源池允許安排和分配用戶訪問特定池,用來執行YARN應用程序。如果一個池的資源未被使用,它可以被占用(preempted)並分配給其他池。否則,就根據各個池的權重來共享資源。訪問控制列表(Access control lists (ACLs)) 對提交訪問和管理訪問進行限制。

現階段集群資源使用沒有進行明確的划分,業務線與業務線之間任務存在掙搶資源的情況,為了解決這種問題,需要對集群做資源划分和用戶划分,使用的集群為cdh集群,cdh集群已經集成了動態資源池,所以我們也直接采用cdh的資源配置方式進行規划。

划分的目的為針對不同業務、不同用戶、不同需求、不同場景的使用,對yarn任務資源池進行規划和分配,達到資源的管控和隔離,避免各個任務之間產生影響,保證生產環境任務運行穩定。

1、 yarn資源隊列參數設置:

  (1) yarn.scheduler.fair.user-as-default-queue   false

 

  (2) yarn.scheduler.fair.allow-undeclared-pools   false

 

 2、 CDH 動態資源隊列配置入口

 

 

3、 根據用戶的資源隊列管理

如圖,第一步我們划分了2個大的父資源池:

(1) default:默認池,沒有划分資源池的用戶會提交到default資源池

 

 

 

 

  a.  這里權重為10%,default:users 資源成1:9;

  b.  這里不要設置為父池,一定要保證為葉子節點即子池,不然提交不了任務;

  c.  CPU:c 計划策略這里我采用的都是DRF;

  d.  提交訪問控制:配置用戶權限,配置哪些用戶有權限提交任務,注意用逗號分隔(可默認不配);

  e.  管理訪問控制:配置用戶對資源池的管理權限,注意用逗號分開(可默認不配);

 

 

 (2) users池:特定用戶提交任務到該池

  users池配置跟default基本一樣,唯一區別是權限控制所對應用戶有所調整:

 3個用戶:

 

 比如用戶a:

 

(一)   用戶划分

用戶划分主要是為了對業務線和運行環境進行系統級別的隔離,這里划分了兩個用戶,分別對應好房和合生通業務線,如下:

用戶名

用戶目錄

備注

a

/home/a

a 業務線用戶

b

/home/b

b 業務線用戶

hdfs

/var/lib/hadoop-hdfs

大數據公共用戶

各個業務線使用對應的用戶提交任務,涉及到的腳本/依賴/任務/資源等也統一部署在使用的用戶下。

(二)   資源池划分

資源池划分,主要是在yarn隊列/集群資源級別做一個隔離,針對上邊的用戶,划分的資源池情況如下:

資源池名稱

父池

備注

適用任務

root

集群根資源池

root.default

root

集群默認資源池

未指定資源池/用戶

root.users

root

用戶提交任務資源池

各個用戶的父池

root.users.hdfs

users

hdfs用戶保留資源池

大數據公共資源池

root.users.a

users

( a 資源池 )

a 相關業務

root.users.b

users

( b 資源池 )

b 相關業務

 

 

四、 使用及注意事項

一)Hive任務

各業務線使用對應的用戶登陸服務器,運行hive任務默認使用當前用戶的資源池,不需要做特殊處理,如需要特別指定運行的資源池,可以通過以下方式設置對應的資源池

SET mapreduce.job.queuename=xxxx    //xxxx資源池名稱

 

二)MapReduce任務

提交普通的MR任務,可以通過兩種方式使用資源池:

  1. 不指定資源池,提交到當前用戶的資源池,如果當前用戶的資源池不存在,提交到default資源池.
  2. 指定資源池,需要在提交任務時,指定具體的資源池參數,參數如下:

hadoop jar applincation.jar -D mapreduce.job.queuename=xxxx   //xxxx資源池名稱

 

三)Spark任務

Spark任務,在運行時,必須指定要使用的資源池,不然Spark會自動創建資源池,指定資源池的命令如下:

spark-shell --master yarn --queue xxxx   //xxxx資源池名稱

spark-submit --master yarn --queue xxxx    //xxxx資源池名稱

 

四)Flink任務

Flink任務,在運行時,必須要指定使用的資源池, 指定資源池的參數命令如下:

./bin/flink run application.jar -qu | --queue xxxx    //xxxx資源池名稱

 

五、 壓力測試

一)  資源池滿負載情況

User用中資源已滿,圖中灰色部分為已經分配使用的資源池,虛線部分為當前保留可用動態使用的資源池。

(二)      任務等待情況

(三)      集群資源使用情況

(四)      各個資源池使用情況

Hst資源池使用情況,可用看到cpu已經分配完畢

Easylife資源池資源已經分配完畢

Hdfs資源池資源已經分配完畢

通過上邊一系列情況可用看出,在三個資源池都分配完畢后,任務還是正常運行,沒有出現無法提交任務,任務出錯等問題.多租戶配置方案可用滿足我們對資源和運行環境的隔離需求。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM