CDH Yarn資源隊(duì)列劃分管理
場景:根據(jù)不同項(xiàng)目或不同用戶,對yarn資源隊(duì)列進(jìn)行劃分,達(dá)到資源管控,任務(wù)管控的目的
CDH版本:5.x
配置:
1 yarn資源隊(duì)列參數(shù)設(shè)置:
(1)yarn.scheduler.fair.user-as-default-queue false

解釋:當(dāng)設(shè)置為 true 時(shí),如果未指定池名稱,F(xiàn)air Scheduler 將會(huì)使用用戶名作為默認(rèn)的池名稱。當(dāng)設(shè)置為 false 時(shí),所有應(yīng)用程序都在一個(gè)名為 default 的共享池中運(yùn)行。設(shè)置成false是為了不根據(jù)用戶名而自動(dòng)分配資源池。
Fair Scheduler:yarn的公平調(diào)度器,對全局資源和對所有的應(yīng)用作業(yè)都均勻分配的資源分配方法。默認(rèn)情況下,它是基于內(nèi)存來安排公平調(diào)度策略,也可以配置成為同時(shí)基于內(nèi)存和CPU來進(jìn)行調(diào)度。總的來說,它是一種基于內(nèi)存,給集群中所提交的應(yīng)用程序分配資源的調(diào)度器。
(2)yarn.scheduler.fair.allow-undeclared-pools false

解釋:設(shè)置為 true 時(shí),將使用默認(rèn)設(shè)置創(chuàng)建在應(yīng)用程序中指定但未明確配置的池。設(shè)置為 false 時(shí),將在名為 default 的池中運(yùn)行應(yīng)用程序指定的未明確配置的池。此設(shè)置適用于應(yīng)用程序明確指定某個(gè)池時(shí)以及應(yīng)用程序運(yùn)行所在的池的名稱為與該應(yīng)用程序關(guān)聯(lián)的用戶名的情況。
默認(rèn)是true,允許創(chuàng)建未定義的資源池。當(dāng)用戶提交了一個(gè)作業(yè),指定的隊(duì)列不存在的時(shí)候,會(huì)自動(dòng)創(chuàng)建出這個(gè)不存在的隊(duì)列。設(shè)置成false,如果任務(wù)中指定了一個(gè)未定義的資源池,那么這個(gè)資源池將不會(huì)被創(chuàng)建,該任務(wù)會(huì)被分配到默認(rèn)的資源池中,default。
修改完配置重啟服務(wù)
2 CDH 動(dòng)態(tài)資源隊(duì)列配置
如圖,第一步我們劃分了2個(gè)資源池:、
(1)root.default:默認(rèn)池,沒有劃分資源池的用戶會(huì)提交到default資源池

權(quán)重定義了資源池之間分配資源的比例,目前集群中的default資源池和users資源池的權(quán)重各為1,那么集群中的資源會(huì)將50%分配給default,50%分配給users,但是這里的資源分配不是一個(gè)靜態(tài)的概念,假如users中沒有任務(wù)在運(yùn)行,那么default資源池是允許使用超過50%的資源的,且資源池配置允許在線修改,修改后不需要重啟yarn,因?yàn)镽M會(huì)周期性的讀取資源池的配置信息

設(shè)置default資源池的調(diào)度算法:使用DRF,即根據(jù)內(nèi)存和CPU進(jìn)行資源調(diào)度


yarn.scheduler.fair.preemption解釋:啟用后,如果在某些時(shí)間段未達(dá)到池的最小共享,F(xiàn)air Scheduler 可以優(yōu)先選取其他池中的應(yīng)用程序。優(yōu)先權(quán)可保證生產(chǎn)應(yīng)用程序不缺乏資源,同時(shí)還可使群集用于實(shí)驗(yàn)和研究應(yīng)用程序。為盡量減少計(jì)算資源浪費(fèi),F(xiàn)air Scheduler 會(huì)優(yōu)先選取最近啟動(dòng)的應(yīng)用程序。

該項(xiàng)不建議開啟。
Yarn的資源搶占本身就具有一定的資源開銷,并且如果開啟了資源搶占,對于長時(shí)間運(yùn)行的任務(wù)容易出現(xiàn)延遲的情況。所以在此也建議配置隊(duì)列時(shí),要將長時(shí)間運(yùn)行任務(wù)和執(zhí)行時(shí)間較短的任務(wù)放在不同的隊(duì)列中。同時(shí)對于隊(duì)列的maxResource,可以適當(dāng)?shù)呐渲么笮?,這樣即使不打開搶占,RM也是可以將一個(gè)隊(duì)列的已經(jīng)運(yùn)行完成的資源回收分配給別的隊(duì)列。從而達(dá)到提高資源的利用率。

解釋:
yarn.acl.enable:指定是否應(yīng)檢查管理 ACL 中指定的用戶和組執(zhí)行管理操作的授權(quán)。
yarn.admin.acl:確定哪些用戶和組可在任何池中提交和中止應(yīng)用程序以及可以對 ResourceManager 角色發(fā)出命令的 ACL。
重啟服務(wù)

添加was用戶資源池
資源池的提交控制訪問和管理控制訪問的配置會(huì)自動(dòng)繼承到子隊(duì)列中,比如在root資源池下的提交控制訪問中配置了用戶was,那么即使root.test的提交用戶訪問中配置是空,用戶was也可以向隊(duì)列test中提交yarn應(yīng)用程序。
計(jì)劃模式:可以根據(jù)不同時(shí)間段使用不同的資源池配置,合理使用集群的縱向資源

創(chuàng)建新的計(jì)劃規(guī)則:

配置完計(jì)劃模式,資源池會(huì)有多套配置,如下

配置完不同時(shí)間段使用的配置集后,修改各配置集的資源分配。例如streaming資源池在默認(rèn)的配置集下,權(quán)重是2,使用的集群的資源占50%,但是在night配置集下配置的權(quán)重是1,使用的集群的資源占33%。而nigth配置集是在每天晚上8點(diǎn)到第二天早上六點(diǎn)時(shí)間段生效的。
放置規(guī)則:控制任務(wù)使用資源池的規(guī)則,即任務(wù)會(huì)根據(jù)以下的規(guī)則放到對應(yīng)的資源池中執(zhí)行,不需要自定義配置,在提交任務(wù)的時(shí)候顯示的指定隊(duì)列即可
用戶限制:控制用戶可以提交的最大應(yīng)用程序數(shù)量,可以統(tǒng)一配置,也可以單獨(dú)給某個(gè)用戶配置
