Spark Streaming實時計算框架介紹


Spark Streaming實時計算框架介紹

 

隨着大數據的發展,人們對大數據的處理要求也越來越高,原有的批處理框架MapReduce適合離線計算,卻無法滿足實時性要求較高的業務,如實時推薦、用戶行為分析等。 Spark Streaming是建立在Spark上的實時計算框架,通過它提供的豐富的API、基於內存的高速執行引擎,用戶可以結合流式、批處理和交互試查詢應用。本文將詳細介紹Spark Streaming實時計算框架的原理與特點、適用場景。

 

Spark Streaming實時計算框架

 

    Spark是一個類似於MapReduce的分布式計算框架,其核心是彈性分布式數據集,提供了比MapReduce更豐富的模型,可以在快速在內存中對數據集進行多次迭代,以支持復雜的數據挖掘算法和圖形計算算法。Spark Streaming是一種構建在Spark上的實時計算框架,它擴展了Spark處理大規模流式數據的能力。

Spark Streaming的優勢在於:

  • 能運行在100+的結點上,並達到秒級延遲。
  • 使用基於內存的Spark作為執行引擎,具有高效和容錯的特性。
  • 能集成Spark的批處理和交互查詢。
  • 為實現復雜的算法提供和批處理類似的簡單接口。

基於雲梯Spark on Yarn的Spark Streaming總體架構如圖1所示。其中Spark on Yarn的啟動流程我的另外一篇文章(《程序員》2013年11月期刊《深入剖析阿里巴巴雲梯Yarn集群》)有詳細描述,這里不再贅述。Spark on Yarn啟動后,由Spark AppMaster把Receiver作為一個Task提交給某一個Spark Executor;Receive啟動后輸入數據,生成數據塊,然后通知Spark AppMaster;Spark AppMaster會根據數據塊生成相應的Job,並把Job的Task提交給空閑Spark Executor 執行。圖中藍色的粗箭頭顯示被處理的數據流,輸入數據流可以是磁盤、網絡和HDFS等,輸出可以是HDFS,數據庫等。

圖1 雲梯Spark Streaming總體架構

Spark Streaming的基本原理是將輸入數據流以時間片(秒級)為單位進行拆分,然后以類似批處理的方式處理每個時間片數據,其基本原理如圖2所示。

圖2 Spark Streaming基本原理圖

首先,Spark Streaming把實時輸入數據流以時間片Δt (如1秒)為單位切分成塊。Spark Streaming會把每塊數據作為一個RDD,並使用RDD操作處理每一小塊數據。每個塊都會生成一個Spark Job處理,最終結果也返回多塊。

下面介紹Spark Streaming內部實現原理。

使用Spark Streaming編寫的程序與編寫Spark程序非常相似,在Spark程序中,主要通過操作RDD(Resilient Distributed Datasets彈性分布式數據集)提供的接口,如map、reduce、filter等,實現數據的批處理。而在Spark Streaming中,則通過操作DStream(表示數據流的RDD序列)提供的接口,這些接口和RDD提供的接口類似。圖3和圖4展示了由Spark Streaming程序到Spark jobs的轉換圖。

圖3 Spark Streaming程序轉換為DStream Graph

圖4 DStream Graph轉換為Spark jobs

在圖3中,Spark Streaming把程序中對DStream的操作轉換為DStream Graph,圖4中,對於每個時間片,DStream Graph都會產生一個RDD Graph;針對每個輸出操作(如print、foreach等),Spark Streaming都會創建一個Spark action;對於每個Spark action,Spark Streaming都會產生一個相應的Spark job,並交給JobManager。JobManager中維護着一個Jobs隊列, Spark job存儲在這個隊列中,JobManager把Spark job提交給Spark Scheduler,Spark Scheduler負責調度Task到相應的Spark Executor上執行。

Spark Streaming的另一大優勢在於其容錯性,RDD會記住創建自己的操作,每一批輸入數據都會在內存中備份,如果由於某個結點故障導致該結點上的數據丟失,這時可以通過備份的數據在其它結點上重算得到最終的結果。

正如Spark Streaming最初的目標一樣,它通過豐富的API和基於內存的高速計算引擎讓用戶可以結合流式處理,批處理和交互查詢等應用。因此Spark Streaming適合一些需要歷史數據和實時數據結合分析的應用場合。當然,對於實時性要求不是特別高的應用也能完全勝任。另外通過RDD的數據重用機制可以得到更高效的容錯處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM