溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何理解spark on yarn內(nèi)存分配

發(fā)布時(shí)間:2021-11-23 18:02:25 來(lái)源:億速云 閱讀:157 作者:柒染 欄目:大數(shù)據(jù)

如何理解spark on yarn內(nèi)存分配,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。  

1. 基礎(chǔ)概念
要掌握這個(gè)知識(shí)點(diǎn),要了解以下幾個(gè)點(diǎn):
  1. spark driver和executor的on-heap內(nèi)存是如何配置的。
  2. spark driver和excutor的off-heap內(nèi)存是如何配置的。
  3. yarn的最小調(diào)度單元。
首先,講一下上面的這三個(gè)概念吧:
1). spark.driver.memory
默認(rèn)值1g。driver進(jìn)程的on-heap內(nèi)存,driver進(jìn)程就是sparkcontext初始化所在的進(jìn)程。在client模式下driver的堆內(nèi)存,不要通過(guò)SparkConf設(shè)置,要用--driver-memory命令替換,或者在默認(rèn)的配置文件里配置。
2). spark.driver.memoryOverhead
默認(rèn)值是max(DriverMemory*0.1,384m)。在YARN或者kubernetes模式的cluster模式下,driver端申請(qǐng)的off-heap內(nèi)存的總量,通常是driver堆內(nèi)存的6%-10%。
3). spark.executor.memory
默認(rèn)值1g。Executor的jvm內(nèi)存總量。
4). spark.executor.memoryOverhead
默認(rèn)值max(executor*0.1,384).單個(gè)executor申請(qǐng)的off-heap內(nèi)存的總量。該參數(shù)僅僅支持在yarn或者kubernetes上使用,通??梢允莈xecutor內(nèi)存的0.06-0.1。
5).spark.yarn.am.memory
默認(rèn)值512m,Appmaster在client模式下的內(nèi)存。假如是Cluster模式下會(huì)使用spark.driver.memory來(lái)代替。
6).Yarn的最小調(diào)度單元
yarn調(diào)度container有個(gè)最小粒度,資源調(diào)度的時(shí)候必須是其整數(shù)倍,最小粒度的配置參數(shù)是
   
     
   
   
   yarn.scheduler.minimum-allocation-mb
最小調(diào)度單元默認(rèn)值是1024,單位是mb。
2.cluster模式
浪尖這里的案例是40個(gè)executor,單個(gè)executor內(nèi)存申請(qǐng)的時(shí)候是20GB,driver是20GB,yarn的web ui截圖如下:
如何理解spark on yarn內(nèi)存分配
整個(gè)APP申請(qǐng)的總內(nèi)存是 923648MB=902GB。
spark app申請(qǐng)的單個(gè) Executor內(nèi)存,從1.3和1.4可以得知是:

   
     
   
   
   20GB * 0.1 +20GB=22GB
那么40個(gè)executor內(nèi)存是:  

   
     
   
   
   22GB * 40 = 880GB
spark on yarn 的cluster模式下Driver端與appmaster是在一起的,所以appmaster內(nèi)存參數(shù)無(wú)效,因此driver和executor總內(nèi)存由1.1和1.2可得:
20GB * 0.1 +20GB=22G
那么計(jì)算所得的總內(nèi)存是:
   
     
   
   
   22GB+88 GB正好是 902GB。
上面計(jì)算的案例中,由于浪院長(zhǎng)這里的yarn集群內(nèi)存調(diào)度的最小粒度是1GB貌似,在上面的計(jì)算中沒(méi)有參與度。
3.cluster模式下

此時(shí)假設(shè)是10個(gè)executor,每個(gè)executor的內(nèi)存是19GB,driver的內(nèi)存依然是19GB。
首先,我們先看一下,web ui的總內(nèi)存:
如何理解spark on yarn內(nèi)存分配
換算成GB就是236544MB/1024 = 231GB
那么經(jīng)計(jì)算可以指導(dǎo)單個(gè)executor的內(nèi)存是:
19*1.1GB =20.9GB
Yarn的最小調(diào)度單元是1GB,所以單個(gè)executor調(diào)度的時(shí)候內(nèi)存是21GB。
10個(gè)executor的總內(nèi)存就是 21 *10 = 210GB
經(jīng)計(jì)算可以得到driver的內(nèi)存是19*1.1GB= 21GB
那么計(jì)算所得的spark app內(nèi)存和 yarn ui上所得內(nèi)存一致。
4.注意點(diǎn)
上述計(jì)算要想正確要確保:
沒(méi)有開(kāi)啟動(dòng)態(tài)executor申請(qǐng)與釋放,假設(shè)開(kāi)啟了,要視情況計(jì)算。

看完上述內(nèi)容,你們掌握如何理解spark on yarn內(nèi)存分配的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI