生產環境調優YARN Container參數

     Container是nodemanager虛擬出來的容器,用來運行task任務的,調優維度是memory+vcore

 

如何優化Container參數??假設128G,16個物理core的服務器

1、裝完Centos,消耗內存1G

2、系統預留15%-20%內存(大概26G,其中包含Centos系統佔用的1G內存),用來防止全部使用導致系統夯住和oom機制,或者給未來部署組件預留點空間。

3、假設該服務器上只有DataNode,NodeManager節點,餘下內存128G-26G=102G

    1)DataNode大概分配2G

    2)NodeManager分配4G

    3)Container內存分配

減掉DataNode和NodeManger,還剩餘102G-2G-4G=96G,極限情況下服務器剩下的內存全部分給nodemanager:96G

配置參數:

     yarn.nodemanager.resource.memory-mb=96G

    最大分配內存和最小分配內存
    yarn.scheduler.maximum-allocation-mb=96G,極限情況下,只有1個container,內存96G
    yarn.scheduler.minimum-allocation-mb=1G,極限情況下,只有96個container,每個內存1G

其中contanier的內存會自動增加,默認是1G的遞增,contanier的數量是1-96個。

     4)Contanier虛擬核:

    默認服務器物理核和虛擬核的比例是1:2,16個物理core的服務器也就是擁有32虛擬核32vcore

1:2的配置參數:

  yarn.nodemanager.resource.pcores-vcores-multiplier=2

極限情況下物理核全部分給nodemanager,也就是32Vcore,配置參數:

yarn.nodemanager.resource.cpu-vcores=32

分配vcore和最大分配vcore配置:

yarn.scheduler.minimum-allocation-vcores=1,極限情況下,只有32個container,
yarn.scheduler.maximum-allocation-vcores=32,極限情況下,只有1個container,

     所以container數量是1-32個。

官方建議,cloudera公司推薦,一個container的vcore最好不要超過5,那麼設置4,所以極限情況下,32/4=8,只有8個container

yarn.scheduler.maximum-allocation-vcores=4

綜合memory+vcore計算確定vocre=4,container爲8個,內存分配

yarn.nodemanager.resource.memory-mb=96G
yarn.scheduler.minimum-allocation-mb=1G
yarn.scheduler.maximum-allocation-mb=12G
極限情況下8個container,96G/8=12G

不過當spark計算時內存不夠大,這個參數肯定要調大,那麼這種理想化的設置個數必然要打破,以memory爲主(但是正常情況下12G是夠用了),

根據內存設置參數
yarn.nodemanager.resource.memory-mb =96G
yarn.scheduler.minimum-allocation-mb=1G
yarn.scheduler.maximum-allocation-mb=8G
就是12個container ,vcore爲12*2=24
根據vocre設置參數
yarn.nodemanager.resource.cpu-vcores =32
yarn.scheduler.minimum-allocation-vcores =1
yarn.scheduler.maximum-allocation-vcores =2

16 個container,內存佔用168g=128G超過resource資源的總內存,所以根據內存爲主導設置參數
vcore是yarn自己引入的,設計初衷是考慮不同節點的CPU的性能不一樣,每個CPU的計算能力不一樣。比如某個物理CPU是另外一個物理CPU的2倍,這時通過設置第一個物理CPU的虛擬core來彌補這種差異(當期節點的xml去設置該參數),不過一般不會存在這種問題,因爲選機器不可能選不一樣的。


例如:

  1. 假如 256G內存 56core,請問參數如何設置?
    256*20%=25.6G ==52G,剩餘256-52-2-4=198G
    yarn.nodemanager.resource.memory-mb=198G
    yarn.scheduler.minimum-allocation-mb=1G
    yarn.scheduler.maximum-allocation-mb=7G
    28個container 28
    7G=196G
    yarn.nodemanager.resource.cpu-vcores=112
    yarn.scheduler.minimum-allocation-vcores=1
    yarn.scheduler.maximum-allocation-vcores=4
  2. 加入該節點還有其他的組件,比如hbase和regionserver進程,那麼該如何設置
    hbase regionserver佔用內存30G,nodemanager這種內存:96G-30G=66G

生產配置:yarn-site.xml

	<property>
		<name>yarn.nodemanager.resource.memory-mb</name>
		<value>2048</value>
	</property>
	<property>
		<name>yarn.scheduler.minimum-allocation-mb</name>
		<value>1024</value>
		<discription>單個任務可申請最少內存,默認1024MB</discription>
	 </property>

  
  <property>
	<name>yarn.scheduler.maximum-allocation-mb</name>
	<value>2048</value>
	<discription>單個任務可申請最大內存,默認8192MB</discription>
  </property>

   <property>
       <name>yarn.nodemanager.resource.cpu-vcores</name>
       <value>2</value>
    </property>

--------------------------

      用人品去感動別人,用行動去帶動別人,用陽光去照耀別人,用堅持去贏得別人,要求自己每天都去做與目標有關的事情,哪怕每天只進步一點點,堅持下來你就是最優秀卓越的!歡迎大家加入大數據qq交流羣:725967421     一起交流,一起進步!!
--------------------------
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章