spark大數(shù)據(jù)任務(wù)提交參數(shù)的優(yōu)化記錄分析
起因
新接觸一個(gè)spark集群,明明集群資源(core,內(nèi)存)還有剩余,但是提交的任務(wù)卻申請(qǐng)不到資源。
分析
環(huán)境
spark 2.2.0 基于yarn集群
參數(shù)
spark任務(wù)提交參數(shù)中最重要的幾個(gè):
spark-submit --master yarn --driver-cores 1 --driver-memory 5G --executor-cores 2 --num-executors 16 --executor-memory 4G
driver-cores driver端核數(shù) driver-memory driver端內(nèi)存大小 executor-cores 每個(gè)執(zhí)行器的核數(shù) num-executors 此任務(wù)申請(qǐng)的執(zhí)行器總數(shù) executor-memory 每個(gè)執(zhí)行器的內(nèi)存大小
那么,該任務(wù)將申請(qǐng)多少資源呢?
申請(qǐng)的執(zhí)行器總內(nèi)存數(shù)大小=num-executor * (executor-memory +spark.yarn.executor.memoryOverhead) = 16 * (4 + 2) = 96 申請(qǐng)的總內(nèi)存=執(zhí)行器總內(nèi)存+dirver端內(nèi)存=101 申請(qǐng)的總核數(shù)=num-executor*executor-core + yarn.AM(默認(rèn)為1)=33 運(yùn)行的總?cè)萜?contanier) = num-executor + yarn.AM(默認(rèn)為1) = 17
所以這里還有一個(gè)關(guān)鍵的參數(shù) spark.yarn.executor.memoryOverhead
這個(gè)參數(shù)是什么意思呢? 堆外內(nèi)存,每個(gè)executor歸spark 計(jì)算的內(nèi)存為executor-memory,每個(gè)executor是一個(gè)單獨(dú)的JVM,這個(gè)JAVA虛擬機(jī)本向在的內(nèi)存大小即為spark.yarn.executor.memoryOverhead,不歸spark本身管理。在spark集群中配置。
也可在代碼中指定 spark.set("spark.yarn.executor.memoryOverhead", 1)
這部份實(shí)際上是存放spark代碼本身的究竟,在executor-memory
內(nèi)存不足的時(shí)候也能應(yīng)應(yīng)急頂上。
問(wèn)題所在
假設(shè)一個(gè)節(jié)點(diǎn)16G的內(nèi)存,每個(gè)executor-memory=4
,理想情況下4x4=16
,那么該節(jié)點(diǎn)可以分配出4
個(gè)節(jié)點(diǎn)供spark任務(wù)計(jì)算所用。 1.但應(yīng)考慮到spark.yarn.executor.memoryOverhead
. 如果spark.yarn.executor.memoryOverhead=2
,那么每個(gè)executor所需申請(qǐng)的資源為4+2=6G
,那么該節(jié)點(diǎn)只能分配2個(gè)節(jié)點(diǎn),剩余16-6x2=4G
的內(nèi)存,無(wú)法使用。
如果一個(gè)集群共100個(gè)節(jié)點(diǎn),用戶將在yarn集群主界面看到,集群內(nèi)存剩余400G,但一直無(wú)法申請(qǐng)到資源。
2.core也是一樣的道理。
很多同學(xué)容易忽略spark.yarn.executor.memoryOverhead
此參數(shù),然后陷入懷疑,怎么申請(qǐng)的資源對(duì)不上,也容易陷入優(yōu)化的誤區(qū)。
優(yōu)化結(jié)果
最終優(yōu)化結(jié)果,將spark.yarn.executor.memoryOverhead調(diào)小,并根據(jù)node節(jié)點(diǎn)資源合理優(yōu)化executor-memory,executor-core大小,將之前經(jīng)常1.6T的內(nèi)存占比,降到1.1左右。并能較快申請(qǐng)到資源。
以上就是spark任務(wù)提交參數(shù)的優(yōu)化記錄分析的詳細(xì)內(nèi)容,更多關(guān)于spark任務(wù)提交參數(shù)優(yōu)化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用MASA?Blazor開(kāi)發(fā)查詢表格頁(yè)
MASA?Blazor?是一個(gè)基于?Material?Design?設(shè)計(jì)語(yǔ)言的?Blazor?組件庫(kù),dotNET開(kāi)發(fā)者只需或者甚至不需要懂得?javascript?就能開(kāi)發(fā)一個(gè)企業(yè)級(jí)中后臺(tái)系統(tǒng),這篇文章主要介紹了使用MASA?Blazor開(kāi)發(fā)一個(gè)標(biāo)準(zhǔn)的查詢表格頁(yè),需要的朋友可以參考下2022-04-04vscode通過(guò)多個(gè)跳板機(jī)連接目標(biāo)機(jī)的方法(兩種方案親測(cè)成功)
這篇文章主要介紹了vscode通過(guò)多個(gè)跳板機(jī)連接目標(biāo)機(jī)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03詳解scratch3.0二次開(kāi)發(fā)之scratch-blocks中的blocks的類(lèi)型、定義和使用方法
scratch-blocks是scratch-gui依賴的一個(gè)基本模塊,blocks的作用是通過(guò)拖曳的方法組成blocks堆塊,今天通過(guò)本文給大家分享scratch3.0二次開(kāi)發(fā)之scratch-blocks的免編譯修改方法,感興趣的朋友一起看看吧2021-08-08性能測(cè)試監(jiān)控網(wǎng)絡(luò)吞吐量過(guò)程詳解
這篇文章是關(guān)于性能的文章,主要介紹了性能測(cè)試中測(cè)試監(jiān)控網(wǎng)絡(luò)吞吐量過(guò)程,文中給了詳細(xì)的示例分析,有需要的朋友可以借鑒參考下2021-09-09即時(shí)通訊軟件在網(wǎng)頁(yè)上啟動(dòng)臨時(shí)對(duì)話的鏈接代碼
旺旺臨時(shí)對(duì)話的鏈接,MSN臨時(shí)對(duì)話的鏈接,Skype臨時(shí)對(duì)話的鏈接2008-11-11HTTP協(xié)議詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了HTTP協(xié)議詳解,超文本傳輸協(xié)議(HTTP)是一種通信協(xié)議,它允許將超文本標(biāo)記語(yǔ)言(HTML)文檔從Web服務(wù)器傳送到客戶端的瀏覽器2017-07-07使用swipe方法模擬屏幕滑動(dòng)與手勢(shì)密碼繪制
這篇文章主要介紹了使用swipe方法模擬屏幕滑動(dòng)與手勢(shì)密碼繪制 ,本文通過(guò)實(shí)力代碼,圖文效果的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08