本期內容:算法
一、解密Spark Streaming運行機制編程
二、解密Spark Streaming架構微信
上期回顧:架構
一、技術界的尋龍點穴,每一個領域都有本身的龍脈,Spark就是大數據界的龍脈,Spark Streaming就是Spark的龍血;框架
二、採用了降維(把時間Batch Interval放大)的方式,進行案例演示實戰,獲得的結論是:特定的時間內是RDD在執行具體的Job;大數據
運行機制概念:優化
Spark Streaming運行時與其說是Spark Core上的一個流式處理框架,不如說是Spark Core上的一個最複雜的應用程序。若是掌握了Spark streaming這個複雜的應用程序,那麼理解其餘的spark應用程序都不是問題了,爲何這樣說呢?咱們看Spark官方網站對Spark Streaming的介紹:網站
Spark早期的時候只有Spark Core,上面的子框架是一步一步開發出來的,經過上面框架的使用能夠洞察出Spark的內部機制,Spark Sql因爲涉及了太多的Sql語法細節的解析或優化,不適合做爲一個具體的子框架來完全研究Spark,而Spark R因爲功能有限和不成熟,也排除掉,Spark Graphx最近發行的幾個版本基本上沒有改進,意味着Graphx基本上發展到盡頭了,另外圖計算有 不少數學計算算法,而Spark ML再封裝了Vector(向量)、Matrix(矩陣)以及結合RDD構建了衆多的庫,ML也有不少的數學知識, 因此最佳的入手點是Spark Streaming.ui
結合內部運行原理圖分析:spa
上一講咱們說過Spark Core處理的每一步都是基於RDD的,RDD之間有依賴關係。上圖中的RDD的DAG顯示的是有3個Action,會觸發3個job,RDD自下向上依賴,RDD產生job就會具體的執行。
從DSrteam Graph中能夠看到,DStream的邏輯與RDD基本一致,DStream就是在RDD的基礎上加上了時間維度。而RDD的DAG依賴又能夠叫空間維度,因此說整個Spark Streaming就是時空維度。
從這個角度來說,能夠將Spark Streaming放在座標系中。其中Y軸就是對RDD的操做,RDD的依賴關係構成了整個job的邏輯,而X軸就是時間。隨着時間的流逝,固定的時間間隔(Batch Interval)就會生成一個job實例,進而在集羣中運行。
在Spark Streaming中,會不斷的有數據流進來,它會不斷的把數據積攢起來,積攢的依據是以Batch Interval來積攢的,內部會造成一系列固定不變的數據集或event集合(假如說數據來自flume或者kafka)。咱們就能感覺Event的存在,Event就是數據,構成了數據的集合,而RDD處理的時候是基於固定不變的數據集合,事實上,DStream基於固定的時間間隔造成的RDD Graph正是基於某一個batch的數據集的。
Spark Streaming重要概念總結:
DStream(離散流):是整個Spark Streaming編程的基本單位或者基本對象,全部Spark Streaming都是基於DStream的;
DStream是RDD的模板;DStream的依賴關係構成了DStream Graph,是RDD DAG的模板,DAG對應的是SDtream Graph,RDD對應的是DStream;
DStream隨着時間的流逝生成一系列的RDD;
DSTream是邏輯級別的;想象中的不是實際存在的;
RDD是物理級別的;
DSTream中關鍵代碼說明:
// DStream.scala line 83 // RDDs generated, marked as private[streaming] so that testsuites can access it @transient private[streaming] var generatedRDDs = new HashMap[Time, RDD[T]] ()
這裏的HashMap,以時間爲key,以RDD爲value,DStream隨着時間的流逝,不斷的生成RDD,基於RDD不但的產生依賴關係的job,並經過jobScheduler在集羣上運行。再次驗證了DStream就是RDD的模版。
終極總結:
DStream就是對RDD操做封裝的集合,對DStream操做的transform的操做就會做用於內部封裝的集合的每個RDD,因此對RDD的操做就產生了RDD之間的依賴關係就構成了DAG的依賴關係,
爲何會對RDD進行操做?這個是對DStream操做的業務邏輯,也就是空間維度決定的,這空間維度做用於DStream這樣一個集合,隨着時間的流逝每一個Batch Interval造成了具體的數據集產生了RDD,
對RDD進行transform操做,進而造成了RDD的依賴關係RDD DAG,造成job。而後jobScheduler根據時間調度,基於RDD的依賴關係,把做業發佈到Spark Cluster上去運行,不斷的產生Spark做業。
特別感謝王家林老師的獨具一格的講解:
王家林老師名片:
中國Spark第一人
新浪微博:http://weibo.com/ilovepains
微信公衆號:DT_Spark
博客:http://blog.sina.com.cn/ilovepains
QQ:1740415547
YY課堂:天天20:00現場授課頻道68917580