一、概述
每個job提交到yarn上執行時,都會分配Container容器去運行,而這個容器需要資源才能運行,這個資源就是Cpu和內存。
1、CPU資源調度
目前的CPU被Yarn划分為虛擬CPU,這是yarn自己引入的概念,因為每個服務器的Cpu計算能力不一樣,有的機器可能是 其他機器的計算能力的2倍,然后可以通過多配置幾個虛擬內存彌補差異。在yarn中,cpu的相關配置如下。
- yarn.nodemanager.resource.cpu-vcores
表示該節點服務器上yarn可以使用的虛擬的CPU個數,默認是8,推薦配置與核心個數相同,如果節點CPU的核心個數不足8個,需要調小這個值,yarn不會智能的去檢測物理核數。如果機器性能較好,可以配置為物理核數的2倍。
- yarn.scheduler.minimum-allocation-vcores
表示單個任務最小可以申請的虛擬核心數,默認為1
- yarn.sheduler.maximum-allocation-vcores
表示單個任務最大可以申請的虛擬核數,默認為4;如果申請資源時,超過這個配置,會拋出 InvalidResourceRequestException
2、Memory資源調度
yarn一般允許用戶配置每個節點上可用的物理資源,可用指的是將機器上內存減去hdfs的,hbase的等等剩下的可用的內存。
- yarn.nodemanager.resource.memory-mb
設置該節點上yarn可使用的內存,默認為8G,如果節點內存不足8G,要減少這個值,yarn不會智能的去檢測內存資源,一般這個值式yarn的可用內存資源。
- yarn.scheduler.minmum-allocation-mb
單個任務最小申請物理內存量,默認是1024M,根據自己業務設定
- yarn.scheduler.maximum-allocation-mb
單個任務最大可以申請的物理內存量,默認為8291M
二、如果設置這幾個參數
如果一個服務器是32核,虛擬后為64核,128G內存,我們該如何設置上面的6個參數呢?即如何做到資源最大化利用
生產上我們一般要預留15-20%的內存,那么可用內存就是128*0.8=102.4G,去除其他組件的使用,我們設置成90G就可以了。
1、yarn.sheduler.maximum-allocation-vcores
一般就設置成4個,cloudera公司做過性能測試,如果CPU大於等於5之后,CPU的利用率反而不是很好。這個參數可以根據生成服務器決定,比如公司服務器很富裕,那就直接設置成1:1;設置成32,如果不是很富裕,可以直接設置成1:2。我們以1:2來計算。
2、yarn.scheduler.minimum-allocation-vcores
如果設置vcoure = 1,那么最大可以跑64/1=64個container,如果設置成這樣,最小container是64/4=16個。
3、yarn.scheduler.minmum-allocation-mb
如果設置成2G,那么90/2=45最多可以跑45個container,如果設置成4G,那么最多可以跑24個;vcore有些浪費。
4、yarn.scheduler.maximum-allocation-mb
這個要根據自己公司的業務設定,如果有大任務,需要5-6G內存,那就設置為8G,那么最大可以跑11個container。