spark streaming應(yīng)用一個越跑越慢的bug

題記:

這是我的第一篇技術(shù)博文,寫得不好請多提意見纪吮。然后,感謝張志斌老師萎胰,畢業(yè)之前張老師幫助我解一些“神奇的bug”碾盟,現(xiàn)在畢業(yè)一個月,我終于自己開始解自己認為“神奇的bug”奥洼。

背景:

我需要在spark streaming上做一個窗口的統(tǒng)計功能巷疼,但是因為一些原因晚胡,不能利用window相關(guān)算子灵奖。于是,我在driver上保持了一個resultRDD估盘,在DStream內(nèi)不斷地去更新這個resultRDD瓷患,包括新信息的統(tǒng)計,和過期信息的剔除遣妥。

現(xiàn)象:

batchSize設(shè)置為1分鐘擅编,程序剛開始運行的一天內(nèi),每個batch的處理時間都是2秒以下箫踩,如下圖:


start.png

運行長時間之后爱态,監(jiān)控頁面如下:(忽略時間戳,為了截圖重啟了程序)


end.png

可以看到境钟,每個job都skip了大量的stage锦担,每個stage內(nèi),都skip了大量的task慨削。而且有一個很有意思的現(xiàn)象洞渔,skip的數(shù)量都是遞增的。而且缚态,從skip的數(shù)字上來看磁椒,也很有規(guī)律。
再注意 job內(nèi)stage的執(zhí)行時間玫芦,每個job有2個stage浆熔,加起來平均2 ~ 3秒。但此時桥帆,batch的處理時延已經(jīng)達到了20 ~ 30秒医增。

總結(jié)一下遇到的問題:我的streaming程序連續(xù)運行一周之后师郑,慢了一個數(shù)量級,但實際花費在執(zhí)行上的時間近似不變调窍。到這宝冕,我已經(jīng)認為是一個“神奇的bug”了。

debug:

嚴格的說邓萨,batch的處理時間 = 生成執(zhí)行計劃時間 + task調(diào)度時間 + 各個stage執(zhí)行時間
在我的場景中地梨,batch的處理時間遠高于stage執(zhí)行時間和。就說明缔恳,執(zhí)行計劃生成和task調(diào)度花費了大量時間宝剖。task調(diào)度是yarn負責(zé),開銷主要在分發(fā)策略和網(wǎng)絡(luò)開銷上歉甚,這部分不會太耗時万细。剩下就是執(zhí)行計劃生成了。
在spark中纸泄,執(zhí)行計劃是通過RDD的依賴關(guān)系來生成DAG赖钞,并以此來劃分stage生成執(zhí)行計劃,代碼就不貼了聘裁,大致就是根據(jù)RDD的依賴關(guān)系遞歸地深度優(yōu)先搜索雪营,終止條件就是某個RDD的依賴為空,也就是說搜索到源RDD衡便。
了解了DAG的生成原理之后献起,再回過頭來看文章開頭說的背景,我們來模擬一下DAG的生成镣陕,DStream.foreachRDD谴餐,開始計算,假設(shè)當前時間為 t呆抑,然后t時刻的resultRDD依賴t-1時刻的resultRDD岂嗓,t-1時刻resultRDD依賴于t-2時刻的resultRDD。理肺。
問題的根源找出來了摄闸,隨著時間的推移,依賴的層次越來越多妹萨。最終導(dǎo)致DAG的生成耗費了大量時間年枕。
要解決這個問題,就要清除掉resultRDD的依賴關(guān)系乎完,如何清除熏兄?
答案是 checkpoint

private[spark] def markCheckpointed(): Unit = {  
    clearDependencies()
    partitions_ = null
    deps = null
}

在checkpoint之后,spark會清空rdd的依賴。
至此摩桶,“神奇的bug”解決桥状。

至于前面提到的大量skip:DAG生成遍歷了rdd的整個歷史,但是在DAG具體的執(zhí)行過程中硝清,會發(fā)現(xiàn)某一些stage辅斟,task已經(jīng)被運算過,因此不會再次計算芦拿,這樣就產(chǎn)生了skip士飒。
最后,愿我的未來再不會覺得有“神奇的bug”蔗崎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酵幕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缓苛,更是在濱河造成了極大的恐慌芳撒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件未桥,死亡現(xiàn)場離奇詭異笔刹,居然都是意外死亡,警方通過查閱死者的電腦和手機钢属,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門徘熔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人淆党,你說我怎么就攤上這事⊙攘梗” “怎么了染乌?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長懂讯。 經(jīng)常有香客問我荷憋,道長,這世上最難降的妖魔是什么褐望? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任勒庄,我火速辦了婚禮,結(jié)果婚禮上瘫里,老公的妹妹穿的比我還像新娘实蔽。我一直安慰自己,他們只是感情好谨读,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布局装。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铐尚。 梳的紋絲不亂的頭發(fā)上拨脉,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音宣增,去河邊找鬼玫膀。 笑死,一個胖子當著我的面吹牛爹脾,可吹牛的內(nèi)容都是我干的匆骗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼誉简,長吁一口氣:“原來是場噩夢啊……” “哼碉就!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起闷串,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤瓮钥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后烹吵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碉熄,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年肋拔,在試婚紗的時候發(fā)現(xiàn)自己被綠了锈津。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡凉蜂,死狀恐怖琼梆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窿吩,我是刑警寧澤茎杂,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站纫雁,受9級特大地震影響煌往,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜轧邪,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一刽脖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧忌愚,春花似錦曲管、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽申尤。三九已至,卻和暖如春衙耕,著一層夾襖步出監(jiān)牢的瞬間昧穿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工橙喘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留时鸵,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓厅瞎,卻偏偏與公主長得像饰潜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子和簸,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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