1. 程式人生 > >SparkStreaming執行機制和架構詳解

SparkStreaming執行機制和架構詳解

本篇博文將從以下幾點組織文章:
1. 解密Spark Streaming執行機制
2. 解密Spark Streaming架構
一:解密Spark Streaming執行機制
1. DAG生成模板 :DStreamGraph

a)  Spark Streaming中不斷的有資料流進來,他會把資料積攢起來,積攢的依據是以Batch Interval的方式進行積攢的,例如1秒鐘,但是這1秒鐘裡面會有很多的資料例如eventevent就構成了一個數據的集合,而RDD處理的時候,是基於固定不變的集合產生RDD。實際上10秒鐘產生一個作業的話,就基於這10event進行處理,對於連續不斷的流進來的資料,就會根據這個連續不斷event
構成batch,因為時間間隔是固定的,所以每個時間間隔產生的資料也是固定的,基於這些batch就會生成RDD的依賴關係。
b)  這裡的RDD依賴關係是基於時間間隔中的一個batch中的資料。隨著時間的流逝,產生了不同RDD的Graph依賴關係的例項,但是其實RDD的Graph的依賴關係都是一樣的。DStream Graph是RDD的Graph的模板,因為RDD的Graph只是DStreamGraph上空間維度上的而已。
c)  所以從整個Spark Streaming執行角度來看,由於執行在Spark Core上需要一種機制表示RDD DAG的處理邏輯,也就是空間維度,所以就產生了DStreamGraph.

2. DStreamGraph就是RDD的靜態模板,來表示空間的處理邏輯具體該怎麼做,隨著時間的流逝,會將模板例項化。

a)  如何例項化?就是在時間間隔中用資料來填充模板,然後就變成了RDD的Graph.
b)  這個時候就需要一個感知時間,也就是所謂的動態的Job控制器,將不斷流進來的資料,每流進來的資料從Spark Streaming的角度來說,他也會根據時間間隔將資料進行切分,並且按照我們的DStreamGraph的模板例項化RDD的DAG的具體例項來針對這個時間間隔產生的資料的集合進行處理。

3. 靜態的RDD的Graph模板 DStreamGraph.
動態的Job控制器:它會根據我們設定的時間間隔收集到資料讓我們的DStreamGraph變成RDD DAG.
4. Spark Streaming流式系統:

a)  DAG生成模板 :DStreamGraph
b)  Timeline的Job生成:
c)  輸入和輸出流
d)  具體的容錯
e)  事務處理:絕大多數情況下,資料流進來一定被處理,而且僅被處理一次。

二:解密Spark Streaming架構
這裡寫圖片描述


1.  Spark Streaming系統的容錯是基於DStreamGraph這個模板,不斷的根據時間間隔產生Graph也就是DAG依賴的例項,產生具體的作業,作業具體執行時基於RDD,也就是對於單個Job的容錯是基於RDD的。
2.  Spark Streaming是一個框架,本身也有自己的容錯方式,例如資料接收的太多處理不完,這個時候Spark Streaming就會限流。
3.  Spark Streaming會根據資料的大小,動態的調整CPU和記憶體等計算資源。比如資料多的話,用更多的資源。

DStream原始碼分析:
這裡寫圖片描述

隨著時間的流逝不斷的產生DStream,然後根據DStream不斷的產生RDD,根據RDD不斷的產生Job,DStream之間有依賴關係,從原始碼中就可以瞭解到RDD的建立時在DStream中。

總結:
DStream是邏輯級別的,RDD是物理級別的。
DStream是RDD的模板,
DStream的依賴關係構成的DStreamGraph是RDD的DAG的模板。
DStream隨著時間的序列生成一系列的RDD
DStream和RDD之間的關係隨著時間的流逝不斷產生RDD,