Spark 性能調(diào)優(yōu)--Shuffle調(diào)優(yōu) 參數(shù)調(diào)優(yōu)

Shuffle參數(shù)

spark.shuffle.file.buffer

默認(rèn)值:32k
該參數(shù)用于設(shè)置shuffle write task的BufferedOutputStream的buffer緩沖大小妖啥。將數(shù)據(jù)寫到磁盤文件之前,會(huì)先寫入buffer緩沖中完疫,待緩沖寫滿之后,才會(huì)溢寫到磁盤斟赚。

調(diào)優(yōu)建議:如果作業(yè)可用的內(nèi)存資源較為充足的話喊巍,可以適當(dāng)增加這個(gè)參數(shù)的大小(比如64k)掘猿,從而減少shuffle write過程中溢寫磁盤文件的次數(shù)锥涕,也就可以減少磁盤IO次數(shù)衷戈,進(jìn)而提升性能。在實(shí)踐中發(fā)現(xiàn)层坠,合理調(diào)節(jié)該參數(shù)殖妇,性能會(huì)有1%~5%的提升。

spark.reducer.maxSizeInFlight

默認(rèn)值:48m
該參數(shù)用于設(shè)置shuffle read task的buffer緩沖大小破花,而這個(gè)buffer緩沖決定了每次能夠拉取多少數(shù)據(jù)谦趣。

調(diào)優(yōu)建議:如果作業(yè)可用的內(nèi)存資源較為充足的話,可以適當(dāng)增加這個(gè)參數(shù)的大凶俊(比如96m)前鹅,從而減少拉取數(shù)據(jù)的次數(shù),也就可以減少網(wǎng)絡(luò)傳輸?shù)拇螖?shù)峭梳,進(jìn)而提升性能舰绘。在實(shí)踐中發(fā)現(xiàn),合理調(diào)節(jié)該參數(shù)葱椭,性能會(huì)有1%~5%的提升捂寿。

spark.shuffle.io.maxRetries

默認(rèn)值:3
shuffle read task從shuffle write task所在節(jié)點(diǎn)拉取屬于自己的數(shù)據(jù)時(shí),如果因?yàn)榫W(wǎng)絡(luò)異常導(dǎo)致拉取失敗孵运,是會(huì)自動(dòng)進(jìn)行重試的秦陋。該參數(shù)就代表了可以重試的最大次數(shù)。如果在指定次數(shù)之內(nèi)拉取還是沒有成功治笨,就可能會(huì)導(dǎo)致作業(yè)執(zhí)行失敗驳概。

調(diào)優(yōu)建議:對(duì)于那些包含了特別耗時(shí)的shuffle操作的作業(yè),建議增加重試最大次數(shù)(比如10次)旷赖,以避免由于JVM的full gc或者網(wǎng)絡(luò)不穩(wěn)定等因素導(dǎo)致的數(shù)據(jù)拉取失敗顺又。在實(shí)踐中發(fā)現(xiàn),對(duì)于針對(duì)超大數(shù)據(jù)量(數(shù)十億~上百億)的shuffle過程杠愧,調(diào)節(jié)該參數(shù)可以大幅度提升穩(wěn)定性待榔。

spark.shuffle.io.retryWait

默認(rèn)值:5s
具體解釋同上逞壁,該參數(shù)代表了每次重試?yán)?shù)據(jù)的等待間隔流济,默認(rèn)是5s锐锣。

調(diào)優(yōu)建議:建議加大間隔時(shí)長(比如60s),以增加shuffle操作的穩(wěn)定性绳瘟。

spark.shuffle.memoryFraction

默認(rèn)值:0.2
該參數(shù)代表了Executor內(nèi)存中雕憔,分配給shuffle read task進(jìn)行聚合操作的內(nèi)存比例,默認(rèn)是20%糖声。

調(diào)優(yōu)建議:在資源參數(shù)調(diào)優(yōu)中講解過這個(gè)參數(shù)斤彼。如果內(nèi)存充足,而且很少使用持久化操作蘸泻,建議調(diào)高這個(gè)比例琉苇,給shuffle read的聚合操作更多內(nèi)存,以避免由于內(nèi)存不足導(dǎo)致聚合過程中頻繁讀寫磁盤悦施。在實(shí)踐中發(fā)現(xiàn)并扇,合理調(diào)節(jié)該參數(shù)可以將性能提升10%左右。

spark.shuffle.manager

默認(rèn)值:sort
該參數(shù)用于設(shè)置ShuffleManager的類型抡诞。Spark 1.5以后穷蛹,有三個(gè)可選項(xiàng):hash、sort和tungsten-sort昼汗。HashShuffleManager是Spark 1.2以前的默認(rèn)選項(xiàng)肴熏,但是Spark 1.2以及之后的版本默認(rèn)都是SortShuffleManager了。tungsten-sort與sort類似顷窒,但是使用了tungsten計(jì)劃中的堆外內(nèi)存管理機(jī)制蛙吏,內(nèi)存使用效率更高。

調(diào)優(yōu)建議:由于SortShuffleManager默認(rèn)會(huì)對(duì)數(shù)據(jù)進(jìn)行排序蹋肮,因此如果你的業(yè)務(wù)邏輯中需要該排序機(jī)制的話出刷,則使用默認(rèn)的SortShuffleManager就可以;而如果你的業(yè)務(wù)邏輯不需要對(duì)數(shù)據(jù)進(jìn)行排序坯辩,那么建議參考后面的幾個(gè)參數(shù)調(diào)優(yōu)馁龟,通過bypass機(jī)制或優(yōu)化的HashShuffleManager來避免排序操作,同時(shí)提供較好的磁盤讀寫性能漆魔。這里要注意的是坷檩,tungsten-sort要慎用,因?yàn)橹鞍l(fā)現(xiàn)了一些相應(yīng)的bug改抡。

spark.shuffle.sort.bypassMergeThreshold

默認(rèn)值:200
當(dāng)ShuffleManager為SortShuffleManager時(shí)矢炼,如果shuffle read task的數(shù)量小于這個(gè)閾值(默認(rèn)是200),則shuffle write過程中不會(huì)進(jìn)行排序操作阿纤,而是直接按照未經(jīng)優(yōu)化的HashShuffleManager的方式去寫數(shù)據(jù)句灌,但是最后會(huì)將每個(gè)task產(chǎn)生的所有臨時(shí)磁盤文件都合并成一個(gè)文件,并會(huì)創(chuàng)建單獨(dú)的索引文件。

調(diào)優(yōu)建議:當(dāng)你使用SortShuffleManager時(shí)胰锌,如果的確不需要排序操作骗绕,那么建議將這個(gè)參數(shù)調(diào)大一些,大于shuffle read task的數(shù)量资昧。那么此時(shí)就會(huì)自動(dòng)啟用bypass機(jī)制酬土,map-side就不會(huì)進(jìn)行排序了,減少了排序的性能開銷格带。但是這種方式下撤缴,依然會(huì)產(chǎn)生大量的磁盤文件,因此shuffle write性能有待提高叽唱。

spark.shuffle.consolidateFiles

默認(rèn)值:false
如果使用HashShuffleManager屈呕,該參數(shù)有效。如果設(shè)置為true棺亭,那么就會(huì)開啟consolidate機(jī)制凉袱,會(huì)大幅度合并shuffle write的輸出文件,對(duì)于shuffle read task數(shù)量特別多的情況下侦铜,這種方法可以極大地減少磁盤IO開銷专甩,提升性能。

調(diào)優(yōu)建議:如果的確不需要SortShuffleManager的排序機(jī)制钉稍,那么除了使用bypass機(jī)制涤躲,還可以嘗試將spark.shffle.manager參數(shù)手動(dòng)指定為hash,使用HashShuffleManager贡未,同時(shí)開啟consolidate機(jī)制种樱。在實(shí)踐中嘗試過,發(fā)現(xiàn)其性能比開啟了bypass機(jī)制的SortShuffleManager要高出10%~30%俊卤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嫩挤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子消恍,更是在濱河造成了極大的恐慌岂昭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狠怨,死亡現(xiàn)場離奇詭異约啊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)佣赖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門恰矩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人憎蛤,你說我怎么就攤上這事外傅。” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵萎胰,是天一觀的道長彬碱。 經(jīng)常有香客問我,道長奥洼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任晚胡,我火速辦了婚禮灵奖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘估盘。我一直安慰自己瓷患,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布遣妥。 她就那樣靜靜地躺著擅编,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箫踩。 梳的紋絲不亂的頭發(fā)上爱态,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音境钟,去河邊找鬼锦担。 笑死,一個(gè)胖子當(dāng)著我的面吹牛慨削,可吹牛的內(nèi)容都是我干的洞渔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缚态,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼磁椒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玫芦,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤浆熔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后桥帆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蘸拔,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年环葵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了调窍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡张遭,死狀恐怖邓萨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤缔恳,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布宝剖,位于F島的核電站,受9級(jí)特大地震影響歉甚,放射性物質(zhì)發(fā)生泄漏万细。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一纸泄、第九天 我趴在偏房一處隱蔽的房頂上張望赖钞。 院中可真熱鬧,春花似錦聘裁、人聲如沸雪营。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽献起。三九已至,卻和暖如春镣陕,著一層夾襖步出監(jiān)牢的瞬間谴餐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工呆抑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留总寒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓理肺,卻偏偏與公主長得像摄闸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妹萨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容