第3課:經過案例對SparkStreaming 透徹理解三板斧之三:解密SparkStreaming

第一部份數據庫

課堂的第一部份是用IMF 晚上案例實戰課的程序再運行一次,把數據再次輸入數據庫裏面,從圖一你能夠看出裏面有不少運行細節,例如receiver.ReceiverSupervisor,receiver.BlockManager,scheduler. JobScheduler多線程

[圖一]大數據







第二部份spa

課堂的第二部份 主要想說明一個Job實際上是怎樣生成的,中間有那幾個 steps, 我把老師的文字,嘗試用一張圖去表達[圖二]線程

圖二:做業生成運行圖orm


1) 在StreamingContext調用start方法的內部實際上是會啓動JobScheduler的Start方法, 進行消息循環接口

2-4) 在JobScheduler的start內部會構造JobGenerator和ReceiverTacker 而且調用JobGenerator和ReceiverTacker的start方法:ci

5) JobGenerator啓動後會不斷的根據batchDuration生成一個個的Jobit

7-8) ReceiverTracker啓動後首先在Spark Cluster中Receiver(實際上是在Executor中先啓動ReceiverSupervisor),在Receiver收到數據後會經過ReceiverSupervisor存儲到Executorio

9) 而且把數據的Metadata信息發送給Driver中的ReceiverTracker

10) 在ReceiverTracker內部會經過ReceivedBlockTracker來管理接受到的元數據信息


Remarks:

每一個BatchInterval會產生一個具體的Job,其實這裏的Job不是Spark Core中所指的Job,它只是基於DStreamGraph而生成的RDD的DAG而已,從Java角度講,至關於Runnable接口實例,此時要想運行Job須要提交給JobScheduler,在JobScheduler中經過線程池的方式找到一個單獨的線程來提交Job到集羣運行(實際上是在線程中基於RDD的Action觸發真正的做業的運行),


爲何使用線程池呢?

1,做業不斷生成,因此爲了提高效率,咱們須要線程池;這和在Executor中經過線程池執行Task有殊途同歸之妙;

2,有可能設置了Job的FAIR公平調度的方式,這個時候也須要多線程的支持;



Thanks for reading


Janice


——————————————————————————————–——————————————————
Reference: DT大數據夢工廠SPARK版本定製課程 – 第3課:經過案例對SparkStreaming 透徹理解三板斧之三:解密SparkStreaming另類實驗及SparkStreaming本質解析


Sharing is Good, Learning is Fun.

業精於勤荒於嬉 行成於思而毀於隨 -- 共勉之

相關文章
相關標籤/搜索