您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了如何使用Spark進行實時流計算,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。
Spark Streaming VS Structured Streaming
Spark Streaming是Spark最初的流處理框架,使用了微批的形式來進行流處理。
提供了基于RDDs的Dstream API,每個時間間隔內的數據為一個RDD,源源不斷對RDD進行處理來實現流計算
Apache Spark 在 2016 年的時候啟動了 Structured Streaming 項目,一個基于 Spark SQL 的全新流計算引擎 Structured Streaming,讓用戶像編寫批處理程序一樣簡單地編寫高性能的流處理程序。
Structured Streaming是Spark2.0版本提出的新的實時流框架(2.0和2.1是實驗版本,從Spark2.2開始為穩定版本)
從Spark-2.X版本后,Spark Streaming就進入維護模式,看見Spark已經將大部分精力投入到了全新的Structured Streaming中,而一些新特性也只有Structured Streaming才有,這樣Spark才有了與Flink一戰的能力。
1、Spark Streaming 不足
Processing Time 而不是 Event Time
首先解釋一下,Processing Time 是數據到達 Spark 被處理的時間,而 Event Time 是數據自帶的屬性,一般表示數據產生于數據源的時間。比如 IoT 中,傳感器在 12:00:00 產生一條數據,然后在 12:00:05 數據傳送到 Spark,那么 Event Time 就是 12:00:00,而 Processing Time 就是 12:00:05。我們知道 Spark Streaming 是基于 DStream 模型的 micro-batch 模式,簡單來說就是將一個微小時間段,比如說 1s,的流數據當前批數據來處理。如果我們要統計某個時間段的一些數據統計,毫無疑問應該使用 Event Time,但是因為 Spark Streaming 的數據切割是基于 Processing Time,這樣就導致使用 Event Time 特別的困難。
Complex, low-level api
這點比較好理解,DStream (Spark Streaming 的數據模型)提供的 API 類似 RDD 的 API 的,非常的 low level。當我們編寫 Spark Streaming 程序的時候,本質上就是要去構造 RDD 的 DAG 執行圖,然后通過 Spark Engine 運行。這樣導致一個問題是,DAG 可能會因為開發者的水平參差不齊而導致執行效率上的天壤之別。這樣導致開發者的體驗非常不好,也是任何一個基礎框架不想看到的(基礎框架的口號一般都是:你們專注于自己的業務邏輯就好,其他的交給我)。這也是很多基礎系統強調 Declarative 的一個原因。
reason about end-to-end application
這里的 end-to-end 指的是直接 input 到 out,比如 Kafka 接入 Spark Streaming 然后再導出到 HDFS 中。DStream 只能保證自己的一致性語義是 exactly-once 的,而 input 接入 Spark Streaming 和 Spark Straming 輸出到外部存儲的語義往往需要用戶自己來保證。而這個語義保證寫起來也是非常有挑戰性,比如為了保證 output 的語義是 exactly-once 語義需要 output 的存儲系統具有冪等的特性,或者支持事務性寫入,這個對于開發者來說都不是一件容易的事情。
批流代碼不統一
盡管批流本是兩套系統,但是這兩套系統統一起來確實很有必要,我們有時候確實需要將我們的流處理邏輯運行到批數據上面。關于這一點,最早在 2014 年 Google 提出 Dataflow 計算服務的時候就批判了 streaming/batch 這種叫法,而是提出了 unbounded/bounded data 的說法。DStream 盡管是對 RDD 的封裝,但是我們要將 DStream 代碼完全轉換成 RDD 還是有一點工作量的,更何況現在 Spark 的批處理都用 DataSet/DataFrame API 了。
2.、Structured Streaming 優勢
相對的,來看下Structured Streaming優勢:
底層原理完全不同
Spark Streaming采用微批的處理方法。每一個批處理間隔的為一個批,也就是一個RDD,我們對RDD進行操作就可以源源不斷的接收、處理數據。
Structured Streaming將實時數據當做被連續追加的表。流上的每一條數據都類似于將一行新數據添加到表中。
Spark 3.0.0發布以后 全新的Structured Streaming UI誕生,可見未來的Structured Streaming將不斷迎來進步。
以上就是關于如何使用Spark進行實時流計算的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。