Spark Streaming基本概念和高階操作

2021-10-05 20:19:39 字數 1866 閱讀 3717

對於實時流式資料計算,spark通過spark streaming元件提供了支援。spark streaming基於spark核心,具備可擴充套件性、高吞吐、自動容錯等特性,資料**支援kafka、flume、twitter、zeromq、kinesis或tcp socket等。處理時可以使用map、reduce、join、window等高階函式來實現複雜邏輯,結果可以寫入檔案系統、資料庫或其他實時展示系統。而且由於spark平台的高度整合性,我們還可以使用前面提到的spark sql、dataframe,以及機器學習、圖計算等高階演算法。spark streaming計算的基本過程如下:

在內部,spark streaming接收實時資料,按週期將資料分成多批次,按批次提交給spark核心來排程計算,如下:

spark streaming使用的資料抽象是dstream,它表示連續的資料流,但內部其實是通過rdd序列來儲存的。

1.基本案例

參考部落格:

2.基本概念

package streaming

import org.apache.log4j.

import org.apache.spark.sparkconf

import org.apache.spark.streaming.

/** * created by administrator on 2020/5/7.

*/object streamingcheckpoint

logger.

getlogger

("org").

setlevel

(level.warn)

// 設定日誌級別

def main

(args: array[string]

)}

資料:

執行結果:

檢查點會快取上一次的計算結果,便於計算:

1.快取與持久化

dstream也可以像rdd一樣非常簡單地快取到記憶體中,呼叫persist()可以把dstream及包含的rdd全部快取到記憶體中,這對於那些需要被反覆使用的dstream尤其重要。視窗函式和updatestatebykey缺省會自動持久化,不需要呼叫persisit(),因為資料的確會被多次使用。

對於從網路接收資料的輸入dstream,預設的持久化級別是複製資料到兩個節點上,以確保容錯能力。

2.wal預寫日誌

spark從1.2版本開始,支援wal。wal是一種避免資料丟失的方法,開啟之後,所有收到的資料在處理之前都會先寫到檢查點目錄下,這樣可以確保在driver恢復期間資料不丟失。設定spark.streaming.receiver.writeaheadlog.enable為true可以開啟此功能,但代價是降低了資料接收的吞吐量,不過可以採用併發接收的方式來降低影響。此外,如果開啟了wal,接收資料時的複製機制可以關閉了,因為兩者的目標是相同的;關閉複製的方法是設定輸入dstream的儲存級別為storagelevel.memory_and_disk_ser。

3.更新程式**

流式計算一般都長期執行,但偶爾也會更新一下計算邏輯。雖然更新程度一般也就不到一分鐘的時間,但是會重啟程式,如果想要在重啟過程中不丟失資料,需要做一些特殊處理,一般有一下兩種方法:

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...