Streaming metadate checkpoint詳解

spark streaming的checkpoint目的是保證長時間運行的任務(wù)在意外掛掉后保證數(shù)據(jù)不丟失寝蹈,checkpoint包含兩種數(shù)據(jù):metadata和data柱锹,本篇主要討論對metadata的checkpoint吹榴。

如何checkpoint

  1. 如果要對metadata做checkpoint,首先要有一個可靠的文件系統(tǒng)保證數(shù)據(jù)的安全性,spark支持hdfs等巷帝。通過代碼streamingContext.checkpoint(checkpointDirectory)指定具體的存儲路徑;

  2. jobGenerator在每一個batch時間后調(diào)用generateJobs方法研侣,在jobScheduler.submitJobSet提交任務(wù)后谱邪,執(zhí)行doCheckpoint方法來保存metadata;

  3. doCheckpoint方法中先判斷是否需要checkpoint庶诡,條件為ssc.checkpointDuration != null && ssc.checkpointDir != null惦银,最重要的是指定后面的ssc.checkpointDir指定路徑,再判斷是否到時間末誓,如果滿足條件進(jìn)行正式代碼扯俱;

  4. 通過ssc.graph.updateCheckpointData(time)調(diào)用DStream的updateCheckpointData,從而執(zhí)行每個DStream子類的checkpointData.update(currentTime)基显,以DirectKafkaInputDStream為例蘸吓,最后執(zhí)行的是DirectKafkaInputDStreamCheckpointData的update,目的是更新要持久的源數(shù)據(jù)checkpointData.data撩幽;通過dependencies.foreach(_.updateCheckpointData(currentTime))使所有依賴的DStream執(zhí)行库继;
  5. 所有DStream都執(zhí)行完update后,執(zhí)行CheckpointWriter.write(new Checkpoint(ssc, time), clearCheckpointDataLater)窜醉,本次batchcheckpoint完成宪萄;

  6. 當(dāng)jobGenerator接收到batch完成事件后,通過jobGenerator.onBatchCompletion(jobSet.time)調(diào)用clearMetadata方法榨惰,最后執(zhí)行DStream的clearMetadata刪除generatedRDDs的過期RDD的metadata拜英。

如何恢復(fù)

  1. 要從checkpoint中恢復(fù),在創(chuàng)建StreamingContext時略有不同琅催,代碼如圖
  2. StreamingContext的getOrCreate方法中居凶,先通過CheckpointReader.read( checkpointPath, new SparkConf(), hadoopConf, createOnError)反序列化出Checkpoint,如果Checkpoint不為空即路徑存在且有數(shù)據(jù)藤抡,使用StreamingContext(null, _, null)構(gòu)造方法創(chuàng)建StreamingContext侠碧;

  3. StreamingContext.start后,在使用DStreamGraph的實例時時會判斷此實例為新創(chuàng)建或從checkpoint中恢復(fù)缠黍,如從checkpoint中恢復(fù)弄兜,則執(zhí)行g(shù)raph.restoreCheckpointData(),通過DStream的restoreCheckpointData最終調(diào)用DStream子類內(nèi)部的DStreamCheckpointData.restore將保存的RDD metadata寫回到generatedRDDs里;

  4. 同時jobGenerator在start時瓷式,判斷ssc.isCheckpointPresent替饿,實際就是判斷ssc里面的cp_是否有值從而執(zhí)行restart方法。restart方法首先從checkpoint的時間開始恢復(fù)任務(wù)贸典,然后生成從最后時間到restartTime時間序列视卢;
  5. 調(diào)用graph.generateJobs生成job,在方法內(nèi)會調(diào)用DStream的generateJobs時廊驼,在getOrCompute方法通過上面還原的generatedRDDs獲取對應(yīng)時間的RDD源數(shù)據(jù)信息据过,如果沒有再重新生成颊埃,最后提交任務(wù)。

創(chuàng)建與恢復(fù)區(qū)別

  1. 先看一下Checkpoint中包括哪些信息:

    val master = ssc.sc.master
    val framework = ssc.sc.appName
    val jars = ssc.sc.jars
    val graph = ssc.graph
    val checkpointDir = ssc.checkpointDir
    val checkpointDuration = ssc.checkpointDuration
    val pendingTimes = ssc.scheduler.getPendingTimes().toArray
    val delaySeconds = MetadataCleaner.getDelaySeconds(ssc.conf)
    val sparkConfPairs = ssc.conf.getAll
    

    以上數(shù)據(jù)都是通過反序列化恢復(fù)得到的蝶俱,對新程序的所有的配置都不會生效,比如隊列饥漫、資源數(shù)等榨呆。

  2. 恢復(fù)checkpoint時,從文件系統(tǒng)反序列化數(shù)據(jù)成CheckPoint的具體代碼為Checkpoint.deserialize(fis, conf)庸队,所以還原的信息要與當(dāng)前編譯的serialVersion一致积蜻,否則會出現(xiàn)異常

  3. 在jobGenerator中,新創(chuàng)建的StreamingContext調(diào)用的是startFirstTime方法彻消,會初始化DStream的一些數(shù)據(jù)竿拆;而checkpoint恢復(fù)調(diào)用的是restart。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宾尚,一起剝皮案震驚了整個濱河市丙笋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌煌贴,老刑警劉巖御板,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牛郑,居然都是意外死亡怠肋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門淹朋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笙各,“玉大人,你說我怎么就攤上這事础芍¤厩溃” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵者甲,是天一觀的道長春感。 經(jīng)常有香客問我,道長虏缸,這世上最難降的妖魔是什么鲫懒? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮刽辙,結(jié)果婚禮上窥岩,老公的妹妹穿的比我還像新娘。我一直安慰自己宰缤,他們只是感情好颂翼,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布晃洒。 她就那樣靜靜地躺著,像睡著了一般朦乏。 火紅的嫁衣襯著肌膚如雪球及。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天呻疹,我揣著相機(jī)與錄音吃引,去河邊找鬼。 笑死刽锤,一個胖子當(dāng)著我的面吹牛镊尺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播并思,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼庐氮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宋彼?” 一聲冷哼從身側(cè)響起弄砍,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宙暇,沒想到半個月后输枯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡占贫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年桃熄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片型奥。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞳收,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出厢汹,到底是詐尸還是另有隱情螟深,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布烫葬,位于F島的核電站界弧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏搭综。R本人自食惡果不足惜垢箕,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兑巾。 院中可真熱鬧条获,春花似錦、人聲如沸蒋歌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至修档,卻和暖如春碧绞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吱窝。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工头遭, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人癣诱。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像袜香,于是被迫代替她去往敵國和親撕予。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

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

  • 兜兜轉(zhuǎn)轉(zhuǎn)這么多年蜈首,不知道為什么總是忘不了一個人实抡,就是想見他一面,看看他過的怎么樣欢策,不管他是否還記得我吆寨!
    走遠(yuǎn)201411閱讀 128評論 0 0
  • 我們家的男孩現(xiàn)在3歲,我準(zhǔn)備這樣養(yǎng)男孩踩寇。 男孩主要分成三個階段: 1啄清、0-6歲幼兒園階段 這個階段關(guān)鍵字是“愛”。...
    余叔閱讀 195評論 0 1
  • 清晨俺孙,被婉轉(zhuǎn)悅耳的鳥鳴叫醒辣卒。我躺在被窩里,用心仔細(xì)地聽著這美妙的音樂睛榄。嘰嘰喳喳荣茫,嘰嘰喳喳,嘿场靴!居然聽不見了啡莉。 于是...
    沐洋公子閱讀 100評論 0 1
  • 是不是我前世的愛情遺落在江南 若不然為什麼今世的寂寞總與江南有染。 ...
    禾鄉(xiāng)閱讀 592評論 2 19