Spark详解(十三):Spark Streaming 运行架构分析
1. 運行架構
SparkStreaming的主要功能包括流處理引擎的流數據接收與存儲以及批處理作業的生成與管理,而Spark核心負責處理Spark Streaming發送過來的作用。Spark Streaming分為Driver端和Client端,運行在Driver端為Streaming Context實例。該實例包括DStreamGraph和JobScheduler(包括ReceiveTracker和JobGenerator)等,而Client包括ReceiveSupervisor和Receiver等。
SparkStreaming進行流數據處理大致上可以分為:啟動流處理引擎,接受以及存儲流數據、處理流數據和輸出處理結果等4個步驟,其運行架構圖如下所示:
(1)初始化StreamContext對象,在該對象啟動過程中實例化DStreamGraph和JobScheduler。其中DStreamGraph用于存放DStream之間的依賴關系等信息,而JobScheduler包括ReceiverTracker和JobGenerator。其中ReceiverTracker為Driver端流數據接收器(Recevier)管理者,JobGenerator為批處理作業生成器。在ReceiverTracker啟動過程中,根據流數據接收器分發策略通知對應的Executor的流數據接收器管理者(RecevierSupervisor)啟動,再由RecevierSupervisor啟動流數據接收器Recevier。
(2)當流數據接收器Recevier啟動之后,持續不斷地接受實時流數據,根據過來的數據的大小判斷,如果數據量很小,則贊成多條數據成一塊,然后再進行塊存儲;如果數據量大,則直接進行塊存儲。對于這些數據Recevier直接交給RecevierSupervisor,由其進行數據存儲操作。塊存儲根據設置是否預寫日志分為兩種,一種是使用非預寫日志BlockManagerBasedBlockHandler方法之間寫到Worker內存或者磁盤中,另一種是進行預寫日志WriteAheadLogBasedBlockHandler方法,即在預寫日志同時把數據寫入到Worker的內存或者磁盤中。數據存儲完畢之后,RecevierSupervisor會把數據存儲的元信息上報給RecevierTracker,RecevierTracker再把這些信息轉發給RecevierBlockTracker中,由他負責管理收到的數據塊元數據信息。
(3)在StreamingContext中的JobGenerator維護一個定時器,該定時器在批處理時間到來時會進行生成作業的操作。在該操作中進行如下操作:
(4)把批處理時間、作業序列Seq[Job]和本批次的元數據包裝成JobSet,調用JobScheduler.submitJobSet(JobSet)提交給JobScheduler,JobScheduler將這些作業發送給SparkCore進行處理,由于該執行為異步執行,因此本步執行速度非常快。
(5)只要提交結束(不管作業是否被執行),Spark Streaming對整個系統做一個檢查點(Checkpoint)
(6)在SparkCore的作業對數據進行處理, 處理完畢之后輸出到外部系統中,如數據庫或文件系統,輸出的數據可以被外部使用。由于實時流數據的數據源不斷地流入,Spark會周期地進行數據處理,相應也會不斷地產生輸出結果。
總結
以上是生活随笔為你收集整理的Spark详解(十三):Spark Streaming 运行架构分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark详解(十二):Spark St
- 下一篇: 数据结构和算法分析:第二章 算法分析