**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 集群上獲取資源的外部服務 ...