溫馨提示×

溫馨提示×

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

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

spark怎么調(diào)節(jié)executor堆外內(nèi)存

發(fā)布時間:2021-12-16 14:59:15 來源:億速云 閱讀:416 作者:iii 欄目:云計算

這篇文章主要講解了“spark怎么調(diào)節(jié)executor堆外內(nèi)存”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“spark怎么調(diào)節(jié)executor堆外內(nèi)存”吧!

什么時候需要調(diào)節(jié)Executor的堆外內(nèi)存大小?
當(dāng)出現(xiàn)一下異常時:
shuffle file cannot find,executor lost、task lost,out of memory

出現(xiàn)這種問題的現(xiàn)象大致有這么兩種情況:

  1. Executor掛掉了,對應(yīng)的Executor上面的block manager也掛掉了,找不到對應(yīng)的shuffle map output文件,Reducer端不能夠拉取數(shù)據(jù)

  2. Executor并沒有掛掉,而是在拉取數(shù)據(jù)的過程出現(xiàn)了問題。


上述情況下,就可以去考慮調(diào)節(jié)一下executor的堆外內(nèi)存。也許就可以避免報錯;此外,有時,堆外內(nèi)存調(diào)節(jié)的比較大的時候,對于性能來說,也會帶來一定的提升。這個executor跑著跑著,突然內(nèi)存不足了,堆外內(nèi)存不足了,可能會OOM,掛掉。block manager也沒有了,數(shù)據(jù)也丟失掉了。

如果此時,stage0的executor掛了,BlockManager也沒有了;此時,stage1的executor的task,雖然通過
Driver的MapOutputTrakcer獲取到了自己數(shù)據(jù)的地址;但是實際上去找對方的BlockManager獲取數(shù)據(jù)的
時候,是獲取不到的。

此時,就會在spark-submit運(yùn)行作業(yè)(jar),client(standalone client、yarn client),在本機(jī)就會打印出log:shuffle output file not found。。。DAGScheduler,resubmitting task,一直會掛掉。反復(fù)掛掉幾次,反復(fù)報錯幾次,整個spark作業(yè)就崩潰了

--conf spark.yarn.executor.memoryOverhead=2048

spark-submit腳本里面,去用--conf的方式,去添加配置;一定要注意?。。∏杏?,
不是在你的spark作業(yè)代碼中,用new SparkConf().set()這種方式去設(shè)置,不要這樣去設(shè)置,是沒有用的!
一定要在spark-submit腳本中去設(shè)置。

spark.yarn.executor.memoryOverhead(看名字,顧名思義,針對的是基于yarn的提交模式)默認(rèn)情況下,這個堆外內(nèi)存上限默認(rèn)是每一個executor的內(nèi)存大小的10%;后來我們通常項目中,真正處理大數(shù)據(jù)的時候,這里都會出現(xiàn)問題,導(dǎo)致spark作業(yè)反復(fù)崩潰,無法運(yùn)行;此時就會去調(diào)節(jié)這個參數(shù),至少1G(1024M),甚至說2G、4G,通常這個參數(shù)調(diào)節(jié)上去以后,就會避免掉某些JVM OOM的異常問題,同時呢,會讓整體spark作業(yè)的性能,得到較大的提升。

spark怎么調(diào)節(jié)executor堆外內(nèi)存

調(diào)節(jié)等待時長!??!

executor,優(yōu)先從自己本地關(guān)聯(lián)的BlockManager中獲取某份數(shù)據(jù)

如果本地BlockManager沒有的話,那么會通過TransferService,去遠(yuǎn)程連接其他節(jié)點上executor
的BlockManager去獲取,嘗試建立遠(yuǎn)程的網(wǎng)絡(luò)連接,并且去拉取數(shù)據(jù),task創(chuàng)建的對象特別大,特別多頻繁的讓JVM堆內(nèi)存滿溢,進(jìn)行垃圾回收。正好碰到那個exeuctor的JVM在垃圾回收。

JVM調(diào)優(yōu):垃圾回收

處于垃圾回收過程中,所有的工作線程全部停止;相當(dāng)于只要一旦進(jìn)行垃圾回收,spark / executor停止工作,無法提供響應(yīng),此時呢,就會沒有響應(yīng),無法建立網(wǎng)絡(luò)連接,會卡住;ok,spark默認(rèn)的網(wǎng)絡(luò)連接的超時時長,是60s,如果卡住60s都無法建立連接的話,那么就宣告失敗了。碰到一種情況,偶爾,偶爾,偶爾?。。]有規(guī)律?。?!某某file。一串file id。uuid(dsfsfd-2342vs--sdf--sdfsd)。not found。file lost。這種情況下,很有可能是有那份數(shù)據(jù)的executor在jvm gc。所以拉取數(shù)據(jù)的時候,建立不了連接。然后超過默認(rèn)60s以后,直接宣告失敗。報錯幾次,幾次都拉取不到數(shù)據(jù)的話,可能會導(dǎo)致spark作業(yè)的崩潰。也可能會導(dǎo)致DAGScheduler,反復(fù)提交幾次stage。TaskScheduler,反復(fù)提交幾次task。大大延長我們的spark作業(yè)的運(yùn)行時間。

可以考慮調(diào)節(jié)連接的超時時長。

--conf spark.core.connection.ack.wait.timeout=300

spark-submit腳本,切記,不是在new SparkConf().set()這種方式來設(shè)置的。spark.core.connection.ack.wait.timeout(spark core,connection,連接,ack,wait timeout,建立不上連接的時候,超時等待時長)調(diào)節(jié)這個值比較大以后,通常來說,可以避免部分的偶爾出現(xiàn)的某某文件拉取失敗,某某文件lost掉了。。。

為什么在這里講這兩個參數(shù)呢?

因為比較實用,在真正處理大數(shù)據(jù)(不是幾千萬數(shù)據(jù)量、幾百萬數(shù)據(jù)量),幾億,幾十億,幾百億的時候。
很容易碰到executor堆外內(nèi)存,以及gc引起的連接超時的問題。
file not found,executor lost,task lost。

調(diào)節(jié)上面兩個參數(shù),還是很有幫助的。

感謝各位的閱讀,以上就是“spark怎么調(diào)節(jié)executor堆外內(nèi)存”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對spark怎么調(diào)節(jié)executor堆外內(nèi)存這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

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

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

AI