Spark Streaming 解析

流式計(jì)算系統(tǒng)的特點(diǎn)

  1. 低延遲

  2. 容錯性
    數(shù)據(jù)不丟失
    數(shù)據(jù)的送達(dá)
    計(jì)算狀態(tài)的持久化
    計(jì)算遷移
    故障恢復(fù)

  3. 擴(kuò)展能力

  4. 應(yīng)用的邏輯表達(dá)能力
    流式計(jì)算任務(wù)都會部署成由多個計(jì)算節(jié)點(diǎn)和流經(jīng)這些節(jié)點(diǎn)的數(shù)據(jù)流構(gòu)成的有向無環(huán)圖(DAG)

系統(tǒng)架構(gòu)

主從
P2P

DAG拓?fù)浣Y(jié)構(gòu)

  1. 構(gòu)成DAG拓?fù)浣Y(jié)構(gòu)的元素是: 計(jì)算節(jié)點(diǎn)和流經(jīng)各個計(jì)算節(jié)點(diǎn)的實(shí)時數(shù)據(jù)流.

  2. DAG結(jié)構(gòu)最常見的拓?fù)浣Y(jié)構(gòu)是: 流水線(最常見的方式), 亂序分組, 定向分組, 廣播模式.

送達(dá)保證

至少送達(dá)一次

至多送達(dá)一次

恰好送達(dá)一次

系統(tǒng)容錯

  1. 備用服務(wù)器, 熱備份, 檢查點(diǎn)機(jī)制.

Spark Streaming

Spark Streaming嚴(yán)格意義上說是一個micro-batch處理框架, 它把連續(xù)的數(shù)據(jù)流按照一定的時間間隔, 分成一系列連續(xù)的批數(shù)據(jù), 組成DStream. 依托于Spark的處理核心, Spark Stream只需把DStream轉(zhuǎn)化成RDD, 并把生成的RDD交給Spark核心處理就行了. 所以, spark-streaming類庫要做的事情就是: 1. 對接外部數(shù)據(jù)流服務(wù)器; 2. 將外部流轉(zhuǎn)化為DStream; 3. 定期向Spark-Core提交任務(wù).
所以, 依托于Spark Core的強(qiáng)大功能, Spark Streaming要做的事情就變得非常的簡單. 第一, 它不負(fù)責(zé)具體的計(jì)算; 第二, 數(shù)據(jù)存儲也是借助Spark Core的BlockManager. 它要做的事情接受數(shù)據(jù), 還有維護(hù)這幾個定時任務(wù).

幾個核心類及其其功能:

  1. ReceiverInputDStream
    這個類的最終要的作用是: 橋接外部數(shù)據(jù)源以及內(nèi)部DStream. 這是一個抽象類, 繼承的子類需要定制不同的Receiver. 比如SocketInputDStream的Receivernew SocketReceiver(host, port, bytesToObjects, storageLevel); KafkaInputDStream的Receiver是KafkaReceiver或者ReliableKafkaReceiver.

  2. Receiver
    這個類是負(fù)責(zé)接收外部數(shù)據(jù)的, 這也是個抽象類, 自定義Receiver要自己實(shí)現(xiàn)onStart(), onStop(), restart()函數(shù). 我們可以看一下SocketReceiver的實(shí)現(xiàn), 非常簡單.
    Receiver的另一個任務(wù)是數(shù)據(jù)存儲, 它內(nèi)部定義了store方法, store方法要ReceiverSupervisor的具體存儲邏輯. ReceiverSupervisor是Receiver的看護(hù)者, Receiver負(fù)責(zé)數(shù)據(jù)的接受邏輯, 它則負(fù)責(zé)數(shù)據(jù)的存儲邏輯. 它內(nèi)部有兩個定時任務(wù): blockIntervalTimer 和 blockPushingThread. ReceiverSupervisor接收到數(shù)據(jù)后, 先對數(shù)據(jù)作內(nèi)存緩存(currentBuffer), blockIntervalTimer定期的將內(nèi)存緩存currentBuffer中的數(shù)據(jù)封裝成Block, 然后blockPushingThread持續(xù)的把剛剛構(gòu)建的Blocks推送給BlockManager.同時還要把剛存儲的BlockInfo推送給ReceiverTracker.

ReceiverTracker接到AddBlock消息之后把BlockInfo交給ReceivedBlockTracker, ReceivedBlockTracker記錄這所有的接收到的Block. ReceivedBlockTracker在記錄之前可以先寫操作日志, 如果宕機(jī)可以從操作日志恢復(fù). ReceivedBlockTracker記錄的這些Block信息用于以后生成Job, 交給Spark-Core處理.

  1. JobGenerator
    JobGenerator內(nèi)部啟動了一個定時任務(wù), 周期性的生成Job和執(zhí)行checkpoint. 生成Job之前先把從上次開始接收到的所有的Block取出來, 構(gòu)建一個AllocatedBlocks, 存到內(nèi)存中. 這一步是準(zhǔn)備數(shù)據(jù). 生成Job的邏輯在DStream的generateJob和compute函數(shù)中. compute函數(shù)最終會生成一個BlockRDD, 數(shù)據(jù)就是剛才我們Allocate的, receiverTracker.getBlocksOfBatch(validTime).getOrElse(id, Seq.empty). generateJob函數(shù)在拿到compute生成的RDD之后把它提交個SparkContext, context.sparkContext.runJob(rdd, emptyFunc).

至此, Spark Streaming的大概是如何工作的解釋完了.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市搀愧,隨后出現(xiàn)的幾起案子惰聂,更是在濱河造成了極大的恐慌疆偿,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搓幌,死亡現(xiàn)場離奇詭異杆故,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)溉愁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進(jìn)店門处铛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拐揭,你說我怎么就攤上這事撤蟆。” “怎么了堂污?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵家肯,是天一觀的道長。 經(jīng)常有香客問我盟猖,道長讨衣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任式镐,我火速辦了婚禮反镇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碟案。我一直安慰自己愿险,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布价说。 她就那樣靜靜地躺著辆亏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鳖目。 梳的紋絲不亂的頭發(fā)上扮叨,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天,我揣著相機(jī)與錄音领迈,去河邊找鬼彻磁。 笑死,一個胖子當(dāng)著我的面吹牛狸捅,可吹牛的內(nèi)容都是我干的衷蜓。 我是一名探鬼主播,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼尘喝,長吁一口氣:“原來是場噩夢啊……” “哼磁浇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起朽褪,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤置吓,失蹤者是張志新(化名)和其女友劉穎无虚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衍锚,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡友题,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了戴质。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片度宦。...
    茶點(diǎn)故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖告匠,靈堂內(nèi)的尸體忽然破棺而出斗埂,到底是詐尸還是另有隱情,我是刑警寧澤凫海,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站男娄,受9級特大地震影響行贪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜模闲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一建瘫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尸折,春花似錦啰脚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亮航,卻和暖如春荸实,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缴淋。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工准给, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人重抖。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓露氮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钟沛。 傳聞我的和親對象是個殘疾皇子畔规,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評論 2 351

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