Spark Streaming入門詳解

2021-07-11 15:28:12 字數 2382 閱讀 8923

背景:

使用spark主要是使用spark streaming,spark streaming的魔力之所在於:

1. 流式處理,如今是乙個流處理時代,一切與流不相關的都是無效的資料。

3. spark streaming本身是乙個程式,spark streaming在處理資料的時候會不斷感知資料。所以對構建複雜的spark應用程式,就極為有參考價值。

在做spark實驗的時候,如果想分析資料的如何流進來,是怎麼樣被計算的,我們就可以通過spark streaming來實現,將batch interval設定時間非常大,這樣裡面的很多細節就可以通過log日誌觀察,這就相當於過去攝影師將李小龍的功夫,然後慢放這樣就可以看的更加清晰。

啟動9999埠,往裡面追加資料。如下圖所示:

spark streaming會在設定的時間間隔中不斷的迴圈,接收資料,然後計算,列印如下:

通過master:18080埠檢視作業的執行,實質上執行了乙個job,然後web端顯示執行了5個job.為啥這樣?繼續下去一**竟!!

先檢視job id 為0的job,然後dag裡面的操作我們在實際的**中並不用這些操作,spark streaming在計算的時候會自動的為我們啟動一些job。

第乙個job會在4個worker上啟動,為了負載均衡,這樣後續計算的時候,就可以最大化的使用集群資源。

spark streaming支援從多種資料來源中讀取資料,如kafka,flume,hdfs,kinesis,twitter等,並且可以使用高階函式如map,reduce,join,window等操作,處理後的資料可以儲存到檔案系統,資料庫,dashboard等。

spark streaming的工作原理

實時接收資料流,以時間的維度將資料拆分成多個batch,然後將每個batch進行計算,最後的結果也是以batch的方式組成的。

spark streaming提供了乙個更高階的抽象,dstream,代表了乙個持續不斷的資料流,dstream的建立可以通過輸入資料來源(kafka,flume和kinesis),或者通過運算元如(map,reduce,join,window),dstream內部就是一系列持續不斷產生的rdd。而每個rdd都包含了乙個時間段的資料。

對dstream應用運算元比如map,其實底層被翻譯為dstream中的每個rdd操作,每個dstream執行乙個map,都會生成新的dstream,但是在底層實質是對rdd進行map操作,然後產生新的rdd,這個過程是通過spark core完成的,spark streaming對spark core進行了一層封裝,隱藏了細節,對開發者提供了方便,易用的api。

對dstream的操作會產生graph,圖中的t1,t2為輸入資料,對其進行join,map,foreach等操作,然後產生新的dstream這樣就構成了乙個graph,最後在計算的時候會回溯。

spark streaming中job的產生,以時間的維度,不斷產生batch,在運算元的操作下,不生產新的dstream,內部實質是產生新的rdd,具體在計算的時候,這樣就將dstream graph轉成了rrd graph。然後再有spark core引擎計算。

總結:

本次課程在很短的時間內對於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...

sparkStreaming核心剖析

receiver從kafka中接收的資料都是一條一條的資料,那麼接下來,會將這一條一條的資料儲存到currnetbuffer arraybuffer 這時有乙個執行緒 blockintervaltimer 每隔一段時間 可配置 將currentbuffer中所有資料打包,封裝為乙個block 然後將...