Spark推測執(zhí)行解決SparkStreaming任務(wù)task卡死問題

背景:測試環(huán)境運(yùn)行一個SparkStreaming任務(wù)语盈,yarn-cluster模式截驮,duration為5分鐘一個批次亏狰,每個批次平均2000w條records甩恼,并行度為60

資源配置為:

${SPARK_HOME}/bin/spark-submit --name ${jobname} --driver-cores 3 --driver-memory 6g --num-executors 24 --executor-memory 6g --executor-cores 2

問題:
觀察了前幾個批次的任務(wù)定枷,運(yùn)行正常孤澎,效率也能趕得上批次,平均每個批次的task都在4分鐘以內(nèi)處理完了欠窒,結(jié)果數(shù)據(jù)也沒問題覆旭,心想應(yīng)該沒問題了,就下班了贱迟。結(jié)果第二天上班后再觀察姐扮,發(fā)現(xiàn)數(shù)據(jù)延遲了幾個小時(shí),任務(wù)卡在了某個批次衣吠,再看這個批次的詳細(xì)情況茶敏,發(fā)現(xiàn)除了運(yùn)行在某臺服務(wù)器上的task還在running,其他的task都已經(jīng)完成了缚俏,而這臺服務(wù)器上的task已經(jīng)running了幾個小時(shí)了...

嘗試解決問題:
首先登陸這臺服務(wù)器查看yarn的container日志惊搏,并沒有發(fā)現(xiàn)ERROR,再看了看這臺服務(wù)器的資源忧换,cpu和內(nèi)存使用情況恬惯,也是正常的!頓時(shí)有點(diǎn)摸不著頭腦亚茬,沒有報(bào)錯酪耳,任務(wù)就卡在那兒了。

重啟大法:
重啟大法好,秉承著重啟解決一切問題的思想碗暗,我把SparkStreaming任務(wù)重啟了颈将,萬一是偶然現(xiàn)象呢。
結(jié)果沒過兩個小時(shí)就被打臉了言疗,同樣的問題又出現(xiàn)了晴圾。

查看日志:
沒有ERROR日志,那就看看INFO日志噪奄,任務(wù)在哪個環(huán)節(jié)卡住的死姚,結(jié)果發(fā)現(xiàn)了以下日志內(nèi)容

INFO executor.Executor: Finished task 51.0 in stage 148.0 (TID 8931). 903 bytes result sent to driver
INFO storage.BlockManager: Dropping broadcast blocks older than 1541581868061
INFO util.MetadataCleaner: Ran metadata cleaner for BROADCAST_VARS
INFO storage.BlockManager: Dropping non broadcast blocks older than 1541581868066
INFO util.MetadataCleaner: Ran metadata cleaner for BLOCK_MANAGER
INFO storage.BlockManager: Dropping broadcast blocks older than 1541582048061
INFO util.MetadataCleaner: Ran metadata cleaner for BROADCAST_VARS
INFO storage.BlockManager: Dropping non broadcast blocks older than 1541582048066
INFO util.MetadataCleaner: Ran metadata cleaner for BLOCK_MANAGER
INFO storage.BlockManager: Dropping broadcast blocks older than 1541582228061
...

在卡死的服務(wù)器的yarn stderr日志中,卡死批次的時(shí)間點(diǎn)找到以上日志內(nèi)容勤篮,每三分鐘出現(xiàn)一次都毒,正常的日志內(nèi)容應(yīng)該是如下所示:

INFO executor.Executor: Finished task 28.0 in stage 145.0 (TID 8728). 1852 bytes result sent to driver
INFO storage.BlockManager: Dropping broadcast blocks older than 1541581328061
INFO storage.BlockManager: Dropped block broadcast_133_piece0
INFO storage.BlockManager: Dropping non broadcast blocks older than 1541581328066
INFO storage.BlockManager: Dropped block broadcast_133
INFO util.MetadataCleaner: Ran metadata cleaner for BLOCK_MANAGER
INFO util.MetadataCleaner: Ran metadata cleaner for BROADCAST_VARS
INFO output.FileOutputCommitter: Saved output of task 'attempt_201811071730_0218_r_000037_0' to hdfs://xxxxxxx/xxxxxxx/log/_temporary/0/task_201811071730_0218_r_000037
INFO executor.Executor: Finished task 37.0 in stage 145.0 (TID 8737). 1852 bytes result sent to driver
INFO output.FileOutputCommitter: Saved output of task 'attempt_201811071730_0218_r_000058_0' to hdfs://xxxxxxx/xxxxxxx/log/_temporary/0/task_201811071730_0218_r_000058
INFO executor.Executor: Finished task 58.0 in stage 145.0 (TID 8758). 1852 bytes result sent to driver
INFO storage.BlockManager: Removing RDD 213

MetadataCleaner用于定期清理persist的RDD緩存和stage task中產(chǎn)生的元數(shù)據(jù),實(shí)質(zhì)上是一個TimerTask實(shí)現(xiàn)的定時(shí)器叙谨,其中BLOCK_MANAGER和BROADCAST_VARS屬于MetadataCleanerType枚舉類的其中兩個元數(shù)據(jù)類別温鸽,代表blockmanager中非broadcast的元數(shù)據(jù)部分和broadcast的元數(shù)據(jù)部分。

但是搞不懂為什么會一直重復(fù)的在清理手负,導(dǎo)致task卡死涤垫,查閱了網(wǎng)上各種文檔也沒有類似的問題解決方法。

于是在想有沒有辦法能夠跳過這個task或者讓這個task重啟竟终,最后想到了Spark的推測執(zhí)行蝠猬。
Spark推測執(zhí)行就是適用于個別task比其他的task慢的情況,當(dāng)某些個task特別慢的時(shí)候(滿足條件)统捶,Spark就重啟一個task處理同樣的一份數(shù)據(jù)榆芦,誰先處理好就用誰的數(shù)據(jù),把另外一個task殺掉喘鸟,正好可以解決我的問題匆绣。

配置推測執(zhí)行:
sparkConf.set("spark.speculation", "true")
sparkConf.set("spark.speculation.interval", "300s")
sparkConf.set("spark.speculation.quantile","0.9")

spark.speculation設(shè)置為true表示打開推測執(zhí)行功能
spark.speculation.interval表示檢測周期,spark會開啟一個線程來檢測是否需要推測執(zhí)行
spark.speculation.quantile表示閾值什黑,設(shè)為0.9表示該批次所有的task有90%執(zhí)行完成即對剩余的task執(zhí)行推測執(zhí)行
spark.speculation.multiplier默認(rèn)值為1.5崎淳,表示慢的task執(zhí)行時(shí)間比完成的task平均時(shí)間多耗費(fèi)1.5倍開啟推測執(zhí)行

這里把檢測周期設(shè)為5分鐘是為了防止資源浪費(fèi),過了批次時(shí)間之后再檢測是否有卡死的task愕把,畢竟task卡死是偶爾出現(xiàn)拣凹,當(dāng)卡死情況出現(xiàn)時(shí),是個別幾個task出現(xiàn)問題恨豁,不會超過60個task總數(shù)的10%嚣镜,所以把閾值設(shè)為0.9,這樣設(shè)置不會在正常批次開啟推測執(zhí)行橘蜜,從而節(jié)約了資源菊匿。

總結(jié):
通過巧妙的設(shè)置推測執(zhí)行,這個問題暫時(shí)被我繞開了,等有時(shí)間一定會研究MetadataCleaner的源碼捧请,嘗試正面解決問題凡涩,立個flag。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疹蛉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子力麸,更是在濱河造成了極大的恐慌可款,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件克蚂,死亡現(xiàn)場離奇詭異闺鲸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)埃叭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進(jìn)店門摸恍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赤屋,你說我怎么就攤上這事立镶。” “怎么了类早?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵媚媒,是天一觀的道長。 經(jīng)常有香客問我涩僻,道長缭召,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任逆日,我火速辦了婚禮嵌巷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘室抽。我一直安慰自己搪哪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布狠半。 她就那樣靜靜地躺著噩死,像睡著了一般。 火紅的嫁衣襯著肌膚如雪神年。 梳的紋絲不亂的頭發(fā)上已维,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天,我揣著相機(jī)與錄音已日,去河邊找鬼垛耳。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的堂鲜。 我是一名探鬼主播栈雳,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缔莲!你這毒婦竟也來了哥纫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤痴奏,失蹤者是張志新(化名)和其女友劉穎蛀骇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體读拆,經(jīng)...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡擅憔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了檐晕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暑诸。...
    茶點(diǎn)故事閱讀 38,711評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辟灰,靈堂內(nèi)的尸體忽然破棺而出个榕,到底是詐尸還是另有隱情,我是刑警寧澤伞矩,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布笛洛,位于F島的核電站,受9級特大地震影響乃坤,放射性物質(zhì)發(fā)生泄漏苛让。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一湿诊、第九天 我趴在偏房一處隱蔽的房頂上張望狱杰。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽错沽。三九已至,卻和暖如春眶拉,著一層夾襖步出監(jiān)牢的瞬間千埃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工忆植, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留放可,地道東北人谒臼。 一個月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像耀里,于是被迫代替她去往敵國和親蜈缤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評論 2 350

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