Apache Spark Streaming 初學者教程:工作、架構和功能
已發表: 2020-02-27我們目前生活在一個每秒快速生成大量數據的世界。 如果對這些數據進行準確分析,則可以提供有意義和有用的結果。 它還可以在適當的時候為許多行業提供解決方案。
這些對旅遊服務、零售、媒體、金融和醫療保健等行業非常有幫助。 許多其他頂級公司已經採用了數據分析,例如亞馬遜在其平台上跟踪客戶與不同類型產品的互動,或者由 Netflix 提供的實時接收個性化推薦的觀眾。
任何使用大量數據的企業都可以使用它,他們可以對其進行分析,以改善其業務的整體流程並提高客戶滿意度和用戶體驗。 從長遠來看,更好的用戶體驗和客戶滿意度為組織帶來好處,從而擴大業務並獲得利潤。
目錄
什麼是流媒體?
數據流是一種將信息作為連續且穩定的流傳輸的方法。 隨著互聯網的發展,流媒體技術也在增加。
什麼是 Spark 流式傳輸?
當數據連續到達一個未綁定的序列時,則稱為數據流。 輸入數據是穩定流動的,並且是通過流來劃分的。 在將數據劃分為離散單元之後,對數據進行進一步處理。 以低延遲對數據進行分析和處理數據稱為流處理。
2013 年,Apache Spark 添加了 Spark Streaming。 數據攝取可能來自許多來源,例如 TCP 套接字、Amazon Kinesis、Apache Flume 和 Kafka。 在復雜算法的幫助下,完成了數據處理。 使用 window、join、reduce 和 map 等高級函數來表示處理。 實時儀表板、數據庫和文件系統用於將處理後的數據推送到文件系統。

流的工作
以下是內部工作。 Spark Streaming 將實時輸入數據流分成多個批次。 Spark Engine 用於處理這些批次以生成最終的流批次。
流中的數據被分成小批量,由 Apache Spark Discretized Stream (Spark DStream) 表示。 Spark RDDs 用於構建 DStreams,這是 Spark 的核心數據抽象。 Apache Spark 的任何組件(例如 Spark SQL 和 Spark MLib)都可以輕鬆地與 Spark Streaming 無縫集成。
Spark Streaming 有助於擴展實時數據流。 它是核心 Spark API 的擴展之一。 它還可以處理容錯流和高吞吐量。 Spark Streaming 的使用對實時數據進行實時處理和流式傳輸。 世界上主要的頂級公司都在使用 Spark Streaming 的服務,例如 Pinterest、Netflix 和 Uber。
Spark Streaming 還提供實時數據分析。 數據的實時和快速處理在 Spark Streaming 的單一平台上執行。
另請閱讀Apache Spark 架構
為什麼選擇 Spark Streaming?
Spark Streaming 可用於流式傳輸來自不同來源的實時數據,例如 Facebook、股票市場和地理系統,並進行強大的分析以鼓勵業務。
Spark Streaming 有五個重要方面使其如此獨特,它們是:
1. 整合
圖形處理、機器學習、SQL 等高級庫可以輕鬆與之集成。
2.組合
流式傳輸的數據可以與交互式查詢以及靜態數據集一起完成。
3.負載均衡
Spark Streaming 具有完美的負載平衡,這使得它非常特別。
4. 資源使用
Spark Streaming 以非常優化的方式使用可用資源。
5. 從落後者和失敗者中恢復
Spark Streaming 可以從任何類型的故障或落後者中快速恢復。
需要 Apache Spark 中的流式傳輸
在設計用於處理傳統數據流的系統時,使用了連續算子模型。 該系統的工作如下:
- 數據源用於流式傳輸數據。 不同類型的數據源是物聯網設備、系統遙測數據、實時日誌等等。 這些流數據被攝取到數據攝取系統中,例如 Amazon Kinesis、Apache Kafka 等等。
- 在集群上,對數據進行並行處理。
- Kafka、Cassandra、HBase等下游系統用於傳遞結果。
一組工作節點運行一些連續的運算符。 流式數據記錄的處理一次完成一個。 然後將文檔轉發給管道中的下一個操作員。
Source Operators 用於從攝取系統接收數據。 Sink Operators 用於向下游系統提供輸出。
一些運算符是連續的。 這是一個自然而直接的模型。 在大規模實時復雜數據分析方面,傳統架構在現代世界面臨一些挑戰,它們是:
快速故障恢復
在當今的系統故障中,通過在並行節點中計算丟失的信息來恢復丟失的信息,很快就會伴隨和適應故障。 因此,與傳統系統相比,它使恢復速度更快。
負載均衡器
負載均衡器有助於以更有效的方式在節點之間分配資源和數據,以便沒有資源在等待或什麼都不做,而是將數據均勻地分佈在整個節點中。
交互式、批處理和流式工作負載的統一
還可以通過對流數據進行查詢來與流數據交互。 它也可以與靜態數據集結合使用。 不能使用新運算符進行臨時查詢,因為它不是為連續運算符設計的。 交互式、流式和批處理查詢可以通過使用單一引擎進行組合。
使用 ML 進行 SQL 查詢和分析
使用通用數據庫命令開發系統使開發人員的生活更容易與其他系統協作。 社區廣泛接受 SQL 查詢。 系統提供可用於高級分析目的的機器學習模塊和庫。
Spark 流式處理概述
Spark Streaming 使用一組 RDD 來處理實時數據。 因此,Spark Streaming 通常用於處理實時數據流。 Spark Streaming 提供實時數據流的容錯和高吞吐量處理。 這是核心 spark API 附帶的一項額外功能。

火花流功能
- 業務分析:使用 Spark Streaming,還可以了解觀眾的行為。 這些學習以後可以用於企業的決策。
- 集成:實時和批處理與 Spark 集成
- 容錯——Spark的獨特能力是它可以有效地從故障中恢復。
- 速度: Spark 實現低延遲
- 擴展: Spark 可以輕鬆地將節點擴展到數百個。
Spark Streaming 基礎知識
1. 流式上下文
在 Spark 中,數據流由 Streaming Context 消費和管理。 它創建了一個 Receiver 對象,該對像是通過註冊一個 Input 流來產生的。 因此,主要的 Spark 功能成為系統的關鍵入口點,因為它提供了許多上下文,為 Akka Actor、Twitter 和 ZeroMQ 等不同來源提供默認工作流。
閱讀: Apache Spark 在大數據中的作用及其獨特之處
火花上下文對象表示與火花簇的連接。 在 Spark Streaming 對象由 StreamingContext 對象創建的情況下,累加器、RDD 和廣播變量也可以由 SparkContex 對象創建。
2. 檢查點、廣播變量和累加器
檢查站
Checkpoint 的工作方式類似於 Checkpoints,後者存儲與遊戲中相同的系統狀態。 在這種情況下,檢查點有助於減少資源損失並使系統對系統故障更具彈性。 檢查點方法是跟踪和保存系統狀態的更好方法,以便在恢復時可以輕鬆地將其拉回。
廣播變量
它不是向網絡節點提供任務的完整副本,而是始終捕獲一個只讀變量,該變量負責確認存在的不同任務的節點,從而降低各個節點的傳輸和計算成本。 因此它可以更有效地提供重要的輸入集。 它還使用高級算法將廣播變量分發到網絡中的不同節點; 從而降低了通信成本。
蓄能器
累加器是可以為不同目的定制的變量。 但也存在已經定義的累加器,如計數器和總和累加器。 還有跟踪累加器,跟踪每個節點,還可以添加一些額外的功能。 數字累加器支持 Spark 也支持的許多數字功能。 也可以根據用戶的要求創建自定義的累加器。
數據流
DStream 表示離散流。 Spark Streaming 提供了必要的抽象,稱為離散流 (DStream)。 DStream 是一種連續流動的數據。 從數據源接收 DStream。 它也可以從經過處理的數據流中獲得。 輸入流的轉換生成處理後的數據流。
在指定的時間間隔後,數據將包含在 RDD 中。 Endless 系列的 RDD 代表一個 DStream。
緩存
開發者可以使用 DStream 將流的數據緩存在內存中。 如果在 DStream 中多次計算數據,這很有用。 它可以通過在 DStream 上使用 persist() 方法來實現。
進行數據複製是為了確保具有彈性系統的安全性,該系統可以抵抗系統中的故障,從而能夠容忍系統中的故障(例如 Kafka、Sockets、Flume 等)
Spark Streaming 優勢與架構
一次處理一個數據流有時會很麻煩; 因此 Spark Streaming 將數據離散化為易於管理的小子批次。 這是因為 Spark 工作人員並行獲取 Spark Streaming 接收器接受的數據緩衝區。 因此整個系統並行運行批次,然後累積最終結果。 然後這些短任務由 Spark 引擎批量處理,並將結果提供給其他系統。
在 Spark Streaming 架構中,計算不是靜態分配和加載到節點,而是基於數據的局部性和資源的可用性。 因此,與以前的傳統系統相比,它減少了加載時間。 因此利用數據局部性原理,也更容易進行故障檢測和恢復。
Spark 中的數據節點通常由 RDD 表示,即 Resilient Distribution Dataset。
Spark Streaming 的目標
以下是 Spark 架構實現的目標。
1.動態負載均衡
這是 Spark Streaming 的基本特性之一,其中數據流由負載均衡器動態分配,負載均衡器負責使用其中定義的特定規則分配數據和計算資源。 負載平衡的主要目標是在工作人員之間有效地平衡工作負載,並將所有內容以並行方式放置,以免浪費可用資源。 並且還負責為系統中的工作節點動態分配資源。
2. 故障與恢復
與傳統系統一樣,當發生操作故障時,整個系統必須重新計算該部分以恢復丟失的信息。 但是當一個節點處理所有這些恢復並使整個系統等待其完成時,問題就來了。 而在 Spark 中,丟失的信息由其他空閒節點計算並帶回系統進行跟踪,而無需像傳統方法那樣進行任何額外的等待。
並且失敗的任務被均勻地分佈在系統中的所有節點上,以比傳統方法更快地重新計算並從失敗中恢復。
3.批量和交互式查詢
Spark 中的一組 RDD 被稱為 Spark 中的 DStream,它提供了流式工作負載和批處理之間的關係。 這些批次存儲在 Spark 的內存中,這提供了一種高效的方式來查詢其中存在的數據。
Spark 最好的部分是它包含了各種各樣的庫,可以在 Spark 系統需要時使用。 這些庫的名稱很少是用於機器學習的 MLlib、用於數據查詢的 SQL、GraphX 和 Data Frame,而 Dataframe 和問題可以通過 DStreams 轉換為等效的 SQL 語句。
4. 性能
由於 spark 系統使用任務的並行分佈來提高其吞吐能力,從而利用能夠實現低至 100 毫秒的低延遲的 spark 引擎。
Spark Streaming 是如何工作的?
流中的數據被分成小批量,在 Spark Streaming 中稱為 DStreams。 它是內部的 RDD 序列。 RDDS 使用 Spark API 來處理數據,並作為結果返回貨件。 Spark Streaming 的 API 在 Python、Java 和 Scala 中可用。 Spark 1.2 中最近引入的 Python API 缺少許多功能。
有狀態計算稱為由 Spark Streaming 基於流中的傳入數據維護的狀態。 在流中流動的數據在一個時間範圍內進行處理。 此時間範圍由開發人員指定,並且由 Spark Streaming 允許。 時間窗口是應該完成工作的時間範圍。 時間窗口在一個時間間隔內更新,這個時間間隔也稱為窗口內的滑動間隔。
Spark 流式傳輸源
與輸入 DStream 相關的 Receiver 對象,將接收到的數據存儲在 Sparks Memory 中進行處理。
內置流有兩類:
1. 基本來源
Streaming API 中可用的源,例如套接字連接和文件系統。
2.進階源碼
高級來源是 Kinesis、Flume 和 Kafka 等。
流媒體操作
Spark RDDS 支持兩種類型的操作,它們是:-
1. Apache Spark 中的輸出操作
輸出操作用於將 DStream 的數據推送到外部系統,如文件系統或數據庫。 輸出操作允許外部系統使用轉換後的數據。 所有的 DStreams 轉換實際上都是由觸發執行的,觸發是由外部系統完成的。
這些是當前的輸出操作:
foreachRDD(func), [suffix]), saveAsHadoopFiles(prefix, [suffix]), saveAsObjectFiles(prefix, [suffix])”prefix-TIME_IN_MS[.suffix]”, saveAsTextFiles(prefix, print()
RDD 懶惰地執行輸出操作。 在 Output 的 DStream Operations 內部,強制執行 RDD Actions 對接收到的數據進行處理。 輸出操作的執行一次完成。 Spark 應用程序定義了輸出操作的執行順序。
2.火花變換
Spark 轉換還會更改 DStream 中的數據,因為 RDD 在 Spark 中支持它。 與 Spark RDD 一樣,DStream 支持許多更改。

以下是最常見的轉換操作:
Window(), updateStateByKey(), transform(), [numTasks]), cogroup(otherStream, [numTasks]), join(otherStream, reduceByKey(func, [numTasks]), countByValue(), reduce(), union(otherStream )、count()、repartition(numPartitions)、filter()、flatMap()、map()。
結論
在當今數據驅動的世界中,存儲和分析數據的工具已被證明是業務分析和增長的關鍵因素。 事實證明,大數據及相關工具和技術的需求不斷增長。 因此,Apache Spark 擁有巨大的市場,並為客戶和企業提供了強大的功能。
如果您有興趣了解有關大數據的更多信息,請查看我們的 PG 大數據軟件開發專業文憑課程,該課程專為在職專業人士設計,提供 7 多個案例研究和項目,涵蓋 14 種編程語言和工具,實用的動手操作研討會,超過 400 小時的嚴格學習和頂級公司的就業幫助。
從世界頂級大學在線學習軟件開發課程。 獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。