Spark版本定製二:經過案例對SparkStreaming透徹理解三板斧之二:解密SparkStreaming運行機制和架構

本期內容:算法

一、解密Spark Streaming運行機制編程

二、解密Spark Streaming架構微信

上期回顧:架構

一、技術界的尋龍點穴,每一個領域都有本身的龍脈,Spark就是大數據界的龍脈,Spark Streaming就是Spark的龍血;框架

二、採用了降維(把時間Batch Interval放大)的方式,進行案例演示實戰,獲得的結論是:特定的時間內是RDD在執行具體的Job;大數據

 

1、解密Spark Streaming運行機制和架構

運行機制概念:優化

      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

相關文章
相關標籤/搜索