Spark Streaming的本質是在Spark的RDD的基礎之上加上了Timer,Timer不斷的運行觸發周而復始的接受數據,產生Job處理數據。.net
由於時間是流動的,因此加上了時間維度的話,RDD也是流動的,所謂RDD的流動,就是每隔時間間隔,都會有新的RDD實例產生,這個實例來自於DStream,RDD之間的依賴關係的模板DAG也是DStream之間的依賴關係的模板,也就是所謂的DStreamGraph。scala
DStream是RDD的模板,DStreamGraph是RDD DAG的模板,DStream和DStreamGraph只是這個時間間隔Batch Duration中,整個RDD產生的一部分,或者說功能的一部分而已。blog
Spark Streaming推出這個DStream和DStreamGraph,只是在時間維度下,方便咱們管理整個RDD的生命週期的方方面面。生命週期
爲何會出現有partition,可是partition沒數據的狀況呢?get
默認的並行度是遺傳的,並行度數量和partition數量是同樣的,若是partition裏沒數據,可是partition仍是存在的。博客
例如:父RDD有100個並行度,子RDD就剩下一條數據,可是並行度仍是100個,仍是100個partition,因此只有一個paritition有數據,其餘都爲空,沒數據,這樣的狀況怎麼處理呢?能夠壓縮處理,也就是coalesce處理。it
DAG是靜態的,RDD生成的時候,只知道元數據,RDD裏面有沒有數據,在計算的時候才知道,因此RDD確定會生成的。io
Spark Streaming中爲何無論有沒有數據,都會產生RDD呢?模板
緣由是:若是沒有了RDD,就沒法生成Job,提交做業的時候有action,action是做用於RDD的,可是沒有了RDD,action就沒法運行了,這個時候應用程序的執行直接失敗;基礎
RecurringTimer.scala
Spark Streaming是一直不斷的循環,無論有沒有數據,有沒有任務,也不關心時間間隔,會一直循環,整個引擎是無時無刻不在執行,無論有用沒用,無論,一直執行,也就是死循環。
本文借鑑了同窗的博客,你們喜歡的話也能夠關注。