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任務,可以通過兩種方式使用資源池:
- 不指定資源池,提交到當前用戶的資源池,如果當前用戶的資源池不存在,提交到default資源池.
- 指定資源池,需要在提交任務時,指定具體的資源池參數,參數如下:
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資源池資源已經分配完畢
通過上邊一系列情況可用看出,在三個資源池都分配完畢后,任務還是正常運行,沒有出現無法提交任務,任務出錯等問題.多租戶配置方案可用滿足我們對資源和運行環境的隔離需求。