隨著大資料的發展,人們對大資料的處理要求也越來越高,原有的批處理框架mapreduce適合離線計算,卻無法滿足實時性要求較高的業務,如實時推薦、使用者行為分析等。 spark streaming是建立在spark上的實時計算框架,通過它提供的豐富的api、基於記憶體的高速執行引擎,使用者可以結合流式、批處理和互動試查詢應用。本文將詳細介紹spark streaming實時計算框架的原理與特點、適用場景。
spark是乙個類似於mapreduce的分布式計算框架,其核心是彈性分布式資料集,提供了比mapreduce更豐富的模型,可以在快速在記憶體中對資料集進行多次迭代,以支援複雜的資料探勘演算法和圖形計算演算法。spark streaming是一種構建在spark上的實時計算框架,它擴充套件了spark處理大規模流式資料的能力。
spark streaming的優勢在於:
spark streaming處理的資料流圖:
spark的各個子框架,都是基於核心spark的,spark streaming在內部的處理機制是,接收實時流的資料,並根據一定的時間間隔拆分成一批批的資料,然後通過spark engine處理這些批資料,最終得到處理後的一批批結果資料。
對應的批資料,在spark核心對應乙個rdd例項,因此,對應流資料的dstream可以看成是一組rdds,即rdd的乙個序列。通俗點理解的話,在流資料分成一批一批後,通過乙個先進先出的佇列,然後 spark engine從該佇列中依次取出乙個個批資料,把批資料封裝成乙個rdd,然後進行處理,這是乙個典型的生產者消費者模型,對應的就有生產者消費者模型的問題,即如何協調生產速率和消費速率。
圖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的資料重用機制可以得到更高效的容錯處理。
參考文件:
Spark Streaming入門詳解
背景 使用spark主要是使用spark streaming,spark streaming的魔力之所在於 1.流式處理,如今是乙個流處理時代,一切與流不相關的都是無效的資料。3.spark streaming本身是乙個程式,spark streaming在處理資料的時候會不斷感知資料。所以對構建複...
Spark Streaming 程式監控
官網中指出,spark中專門為sparkstreaming程式的監控設定了額外的途徑,當使用streamingcontext時,在web ui中會出現乙個 streaming 的選項卡,在此選項卡內,統計的內容展示如下 這其中包括接受的記錄數量,每乙個batch內處理的記錄數,處理時間,以及總共消耗...
spark streaming讀取kafka示例
spark streaming讀取kafka示例,其中 spark streaming優雅的關閉策略優化部分參考 如何管理spark streaming消費kafka的偏移量部分參考 spark向kafka中寫入資料部分參考 object demo 建立streamingcontext return...