Spark流式程式設計介紹 程式設計模型

2022-06-05 16:15:17 字數 1861 閱讀 7014

**spark官方文件

結構化流中的核心概念就是將活動資料流當作乙個會不斷增長的表。這是乙個新的流處理模型,但是與批處理模型很相似。你在做流式計算就像是標準針對靜態表的批查詢,spark會在乙個無限輸入的表上進行增量查詢。我們來從更多詳細內容來理解這個模型。

將輸入的資料流理解為「寫入表」,每個流中到達的資料就像是寫入表中新增的一行。

針對輸入的查詢會生成「結果表」。每個觸發間隔之間(比如1秒鐘),就會有新的行新增到「寫入表」,最終更新結果表。當結果表變更後,我們能夠將變更的結果行寫入外部儲存。

「輸出(output)」定義為寫入外部儲存的內容。輸出存在幾種模式:

要注意每個模式都有確定的適配的查詢,這個會在稍後討論。

為了解釋這個模型的使用方式,我們用上面的快速示例來輔助理解模型。第乙個dataframe型別的變數 line 就是寫入表,而最後dataframe型別的變數 wordcounts 就是結果表。注意針對流的查詢方法,從 line 生成 wordcounts 和乙個靜態的dataframe完全相同。當查詢開始之後,spark會持續檢查從socket鏈結傳入的新資料。如果存在新資料,spark會執行「增量」查詢,並且針對新資料計算更新的計數,整合之前執行的計數,如下圖所示。

注意結構化流並沒有儲存整張表。從資料來源讀取最近有效的資料,增量的處理並且更新結果資料,然後丟棄源資料。spark只保留最小中間狀態資料,用於更新結果(例如上面例子中的中間統計結果計數)。

這個模型明顯和其他的流處理引擎不同。許多流處理系統要求使用者自行維護執行聚合,因為有諸如容錯性(fault-tolerance)、資料一致性(data consistency:at-least-once, at-most-once, exactly-once)。在這個模型中,當有新資料時,由spark負責更新結果表,因此解放了使用者無需關注。我們以模型處理事件時間和延遲資料作為例子來看下。

事件時間是包含在資料本身的。很多應用都希望基於事件時間操作。例如你的想要獲取物聯網裝置每分鐘產生事件數量,然後你可能希望使用資料生成的時間(這就是事件時間),而不是spark接收到他們的時間。事件時間在這個模型中是很自然的,因為每個裝置產生事件都是都是表中的一行資料,而事件時間就是一行資料中的一列。這樣基於視窗的聚合(例如每分鐘的事件數量)可以作為基於事件時間列做的特別的分組和聚合。每個時間視窗都是乙個分組,每行資料也可以屬於多個視窗或分組。因此類似這種基於事件時間的聚合查詢能夠在靜態資料集(例如收集的裝置事件日誌)和動態資料流,能夠是使用者的使用比較簡單。

此外模型天然的能夠基於事件時間處理延遲到達的資料。當spark更新結果表時,他仍然能夠針對延遲資料來更新歷史聚合的結果,也同時可以清除歷史聚合資料,從而限制中間狀態資料的大小。從spark2.1開始,我們支援水位線概念(watermarking),允許使用者指定延遲資料的閾值,系統也能夠清理舊狀態資料。稍後會在視窗操作章節介紹。

保證唯一投送端到端是結構化流的設計中的關鍵目標之一。為了達成這樣的目標,我們設計了結構化流的源(source)、匯(sink)以及執行引擎能夠可靠的跟蹤處理進度,從而能夠重啟/重新處理來應對各種故障。每個資料流的源應該都有偏移量概念(類似kafka的偏移量,或者amazon kinesis 的序列編號)來跟蹤流中的讀取位置。引擎使用儲存點和先寫日誌來記錄每次處理的資料偏移邊界。流的匯設計天然就支援重新處理的冪等性。整合起來,使用可重放的源與冪等的匯,結構化流在面對任何故障時都能保證端對端嚴格一致性(end-to-end exactly-once semantics)

spark程式設計模型二

並行化scala集合 1 spark使用parallelize方法轉換成rdd 2 val rdd1 sc.parallelize array 1,2,3,4,5 3 val rdd2 sc.parallelize list 0 to 10 5 4 引數slice是對資料集切片,每乙個slice啟動...

Spark程式設計模型 RDD

spark程式設計模型是彈性分布式資料集 resilient distributed dataset,rdd 是mapreduce模型的擴充套件和延伸 基於rdd機制實現了多類模型計算,如 1.迭代計算 2.互動式sql查詢 3.mapreduce rdd 4.流式資料處理。markdown 是一種...

spark程式設計

spark應用程式由兩部分組成 1.driver 2.executor 基本概念 sparkcontext spark應用程式的入口,負責排程各個運算資源,協調各個worker node 的executor 並且負責將資料存在記憶體或磁碟上 cluster manager 集群上獲取資源的外部服務 ...