隨着大數據的發展,人們對大數據的處理要求也愈來愈高,原有的批處理框架MapReduce適合離線計算,卻沒法知足實時性要求較高的業務,如實時推薦、用戶行爲分析等。 Spark Streaming是創建在Spark上的實時計算框架,經過它提供的豐富的API、基於內存的高速執行引擎,用戶能夠結合流式、批處理和交互試查詢應用。本文將詳細介紹Spark Streaming實時計算框架的原理與特色、適用場景。html
Spark是一個相似於MapReduce的分佈式計算框架,其核心是彈性分佈式數據集,提供了比MapReduce更豐富的模型,能夠在快速在內存中對數據集進行屢次迭代,以支持複雜的數據挖掘算法和圖形計算算法。Spark Streaming是一種構建在Spark上的實時計算框架,它擴展了Spark處理大規模流式數據的能力。程序員
Spark Streaming的優點在於:算法
基於雲梯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的轉換圖。spa
圖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的數據重用機制能夠獲得更高效的容錯處理。
原文連接:http://www.cnblogs.com/Leo_wl/p/3530464.html