Spark Streaming執(zhí)行原理

Spark Streaming 解決這 4 個(gè)問題的不同 focus拓哟,可以將 Spark Streaming 劃分為四個(gè)大的模塊:

模塊 1:DAG 靜態(tài)定義

模塊 2:Job 動(dòng)態(tài)生成

模塊 3:數(shù)據(jù)產(chǎn)生與導(dǎo)入

模塊 4:長(zhǎng)時(shí)容錯(cuò)


模塊 1:DAG 靜態(tài)定義


2.2 模塊 2:Job 動(dòng)態(tài)生成

現(xiàn)在有了DStreamGraph和DStream,也就是靜態(tài)定義了的計(jì)算邏輯,下面我們來看 Spark Streaming 是如何將其動(dòng)態(tài)調(diào)度的。

在 Spark Streaming 程序的入口疹蛉,我們都會(huì)定義一個(gè) batchDuration枝恋,就是需要每隔多長(zhǎng)時(shí)間就比照靜態(tài)的DStreamGraph來動(dòng)態(tài)生成一個(gè) RDD DAG 實(shí)例。在 Spark Streaming 里禁悠,總體負(fù)責(zé)動(dòng)態(tài)作業(yè)調(diào)度的具體類是JobScheduler,在 Spark Streaming 程序開始運(yùn)行的時(shí)候兑宇,會(huì)生成一個(gè)JobScheduler的實(shí)例碍侦,并被 start() 運(yùn)行起來。

JobScheduler有兩個(gè)非常重要的成員:JobGenerator和ReceiverTracker隶糕。JobScheduler將每個(gè) batch 的 RDD DAG 具體生成工作委托給JobGenerator瓷产,而將源頭輸入數(shù)據(jù)的記錄工作委托給ReceiverTracker。


JobGenerator維護(hù)了一個(gè)定時(shí)器枚驻,周期就是我們剛剛提到的 batchDuration濒旦,定時(shí)為每個(gè) batch 生成 RDD DAG 的實(shí)例。具體的再登,每次 RDD DAG 實(shí)際生成包含 5 個(gè)步驟:

(1)要求ReceiverTracker將目前已收到的數(shù)據(jù)進(jìn)行一次 allocate尔邓,即將上次 batch 切分后的數(shù)據(jù)切分到到本次新的 batch 里;

(2)要求DStreamGraph復(fù)制出一套新的 RDD DAG 的實(shí)例锉矢,具體過程是:DStreamGraph將要求圖里的尾DStream節(jié)點(diǎn)生成具體的 RDD 實(shí)例梯嗽,并遞歸的調(diào)用尾DStream的上游DStream節(jié)點(diǎn)……以此遍歷整個(gè)DStreamGraph,遍歷結(jié)束也就正好生成了 RDD DAG 的實(shí)例沽损;

(3)獲取第 1 步ReceiverTracker分配到本 batch 的源頭數(shù)據(jù)的 meta 信息灯节;

(4) 將第 2 步生成的本 batch 的 RDD DAG,和第 3 步獲取到的 meta 信息,一同提交給JobScheduler異步執(zhí)行炎疆;

(5) 只要提交結(jié)束(不管是否已開始異步執(zhí)行)卡骂,就馬上對(duì)整個(gè)系統(tǒng)的當(dāng)前運(yùn)行狀態(tài)做一個(gè) checkpoint


DStream有一個(gè)重要而特殊的子類ReceiverInputDStream:它除了需要像其它DStream那樣在某個(gè) batch 里實(shí)例化RDD以外形入,還需要額外的Receiver為這個(gè)RDD生產(chǎn)數(shù)據(jù)全跨!

具體的,Spark Streaming 在程序剛開始運(yùn)行時(shí):

(1) 由Receiver的總指揮ReceiverTracker分發(fā)多個(gè) job(每個(gè) job 有 1 個(gè) task)亿遂,到多個(gè) executor 上分別啟動(dòng)ReceiverSupervisor實(shí)例浓若;

(2) 每個(gè)ReceiverSupervisor啟動(dòng)后將馬上生成一個(gè)用戶提供的Receiver實(shí)現(xiàn)的實(shí)例 —— 該Receiver實(shí)現(xiàn)可以持續(xù)產(chǎn)生或者持續(xù)接收系統(tǒng)外數(shù)據(jù),比如TwitterReceiver可以實(shí)時(shí)爬取 twitter 數(shù)據(jù) —— 并在Receiver實(shí)例生成后調(diào)用Receiver.onStart()崩掘;

注意到這里采用的是完整 checkpoint 的方式,和之前的 WAL 的方式都不一樣少办。Checkpoint通常也是落地到可靠存儲(chǔ)如 HDFS苞慢。Checkpoint發(fā)起的間隔默認(rèn)的是和batchDuration 一致;即每次 batch 發(fā)起英妓、提交了需要運(yùn)行的 job 后就做Checkpoint挽放,另外在 job 完成了更新任務(wù)狀態(tài)的時(shí)候再次做一下Checkpoint。

這樣一來蔓纠,在 driver 失效并恢復(fù)后辑畦,可以讀取最近一次的Checkpoint來恢復(fù)作業(yè)的DStreamGraph和 job 的運(yùn)行及完成狀態(tài)。

總結(jié)

模塊長(zhǎng)時(shí)容錯(cuò)保障方式

模塊 1-DAG 靜態(tài)定義driver 端定時(shí)對(duì) DStreamGraph 做 Checkpoint腿倚,來記錄整個(gè) DStreamGraph 的變化

模塊 2-job 動(dòng)態(tài)生成driver 端定時(shí)對(duì) JobScheduler 做 Checkpoint纯出,來記錄每個(gè) batch 的 job 的完成情況

模塊 3-數(shù)據(jù)產(chǎn)生與導(dǎo)入driver 端源頭塊數(shù)據(jù)的 meta 信息上報(bào) ReceiverTracker 時(shí),寫入 WAL

模塊 3-數(shù)據(jù)產(chǎn)生與導(dǎo)入executor 端對(duì)源頭塊數(shù)據(jù)的保障:(1) 熱備敷燎;(2) 冷備暂筝;(3) 重放;(4) 忽略

總結(jié)一下“模塊4:長(zhǎng)時(shí)容錯(cuò)”的內(nèi)容為上述表格硬贯,可以看到焕襟,Spark Streaming 的長(zhǎng)時(shí)容錯(cuò)特性,能夠提供不重饭豹、不丟鸵赖,exactly-once 的處理語(yǔ)義。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拄衰,一起剝皮案震驚了整個(gè)濱河市它褪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翘悉,老刑警劉巖列赎,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡包吝,警方通過查閱死者的電腦和手機(jī)饼煞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诗越,“玉大人砖瞧,你說我怎么就攤上這事∪履” “怎么了块促?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)床未。 經(jīng)常有香客問我竭翠,道長(zhǎng),這世上最難降的妖魔是什么薇搁? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任斋扰,我火速辦了婚禮,結(jié)果婚禮上啃洋,老公的妹妹穿的比我還像新娘传货。我一直安慰自己,他們只是感情好宏娄,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布问裕。 她就那樣靜靜地躺著,像睡著了一般孵坚。 火紅的嫁衣襯著肌膚如雪粮宛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天卖宠,我揣著相機(jī)與錄音窟勃,去河邊找鬼。 笑死逗堵,一個(gè)胖子當(dāng)著我的面吹牛秉氧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜒秤,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼汁咏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了作媚?” 一聲冷哼從身側(cè)響起攘滩,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纸泡,沒想到半個(gè)月后漂问,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年蚤假,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栏饮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡磷仰,死狀恐怖袍嬉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灶平,我是刑警寧澤伺通,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站逢享,受9級(jí)特大地震影響罐监,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞒爬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一弓柱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疮鲫,春花似錦吆你、人聲如沸弦叶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伤哺。三九已至燕侠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間立莉,已是汗流浹背绢彤。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜓耻,地道東北人茫舶。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像刹淌,于是被迫代替她去往敵國(guó)和親饶氏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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