1. 程式人生 > >Spark2.x 入門:Spark Streaming 簡介

Spark2.x 入門:Spark Streaming 簡介

Spark Streaming是構建在Spark上的實時計算框架,它擴充套件了Spark處理大規模流式資料的能力。Spark Streaming可結合批處理和互動查詢,適合一些需要對歷史資料和實時資料進行結合分析的應用場景。

Spark Streaming設計

Spark Streaming是Spark的核心元件之一,為Spark提供了可拓展、高吞吐、容錯的流計算能力。如下圖所示,Spark Streaming可整合多種輸入資料來源,如Kafka、Flume、HDFS,甚至是普通的TCP套接字。經處理後的資料可儲存至檔案系統、資料庫,或顯示在儀表盤裡。

這裡寫圖片描述

Spark Streaming的基本原理是將實時輸入資料流以時間片(秒級)為單位進行拆分,然後經Spark引擎以類似批處理的方式處理每個時間片資料,執行流程如下圖所示。

這裡寫圖片描述

Spark Streaming最主要的抽象是DStream(Discretized Stream,離散化資料流),表示連續不斷的資料流。在內部實現上,Spark Streaming的輸入資料按照時間片(如1秒)分成一段一段的DStream,每一段資料轉換為Spark中的RDD,並且對DStream的操作都最終轉變為對相應的RDD的操作。例如,下圖展示了進行單詞統計時,每個時間片的資料(儲存句子的RDD)經flatMap操作,生成了儲存單詞的RDD。整個流式計算可根據業務的需求對這些中間的結果進一步處理,或者儲存到外部裝置中。

這裡寫圖片描述

Spark Streaming與Storm的對比

Spark Streaming和Storm最大的區別在於,Spark Streaming無法實現毫秒級的流計算,而Storm可以實現毫秒級響應。
Spark Streaming無法實現毫秒級的流計算,是因為其將流資料按批處理視窗大小(通常在0.5~2秒之間)分解為一系列批處理作業,在這個過程中,會產生多個Spark 作業,且每一段資料的處理都會經過Spark DAG圖分解、任務排程過程,因此,無法實現毫秒級相應。Spark Streaming難以滿足對實時性要求非常高(如高頻實時交易)的場景,但足以勝任其他流式準實時計算場景。相比之下,Storm處理的單位為Tuple,只需要極小的延遲。
Spark Streaming構建在Spark上,一方面是因為Spark的低延遲執行引擎(100毫秒左右)可以用於實時計算,另一方面,相比於Storm,RDD資料集更容易做高效的容錯處理。此外,Spark Streaming採用的小批量處理的方式使得它可以同時相容批量和實時資料處理的邏輯和演算法,因此,方便了一些需要歷史資料和實時資料聯合分析的特定應用場合。

相關推薦

Spark2.x 入門Spark Streaming 簡介

Spark Streaming是構建在Spark上的實時計算框架,它擴充套件了Spark處理大規模流式資料的能力。Spark Streaming可結合批處理和互動查詢,適合一些需要對歷史資料和實時資料進行結合分析的應用場景。 Spark Streaming設計

Spark2.2(三十三)Spark StreamingSpark Structured Streaming更新broadcast總結

背景: 需要在spark2.2.0更新broadcast中的內容,網上也搜尋了不少文章,都在講解spark streaming中如何更新,但沒有spark structured streaming更新broadcast的用法,於是就這幾天進行了反覆測試。經過了一下兩個測試::Spark Streaming更

Spark2.1.0文件Spark Streaming 程式設計指南(上)

本文翻譯自spark官方文件,僅翻譯了Scala API部分,目前版本為2.1.0,如有疏漏錯誤之處請多多指教。 原文地址:http://spark.apache.org/docs/latest/streaming-programming-guide.html 因文件篇幅較

Spark入門之八Spark Streaming 的原理以及應用場景介紹

什麼是Spark StreamingSpark Streaming類似於Apache Storm,用於流式資料的處理。根據其官方文件介紹,Spark Streaming有高吞吐量和容錯能力強這兩個特點。Spark Streaming支援的資料輸入源很多,例如:Kafka、F

Spark Streaming簡介

and style 實時處理 board dfs distrib output 數據庫 zed Spark Streaming 是core Spark的一個擴展,用來處理實時數據流,數據源可以來自Kafka, Flume, HDFS等,經過復雜的算法處理後,存入HDFS,

SPARKSpark Streaming簡介

Spark Streaming可以整合多種輸入資料來源,如Kafka、Flume、HDFS甚至是普通的TCP套接字。經處理後的資料可儲存至檔案系統、資料庫、或顯示在儀表盤。 Spark Streaming執行流程 Spark Streaming的基本原理是將實時輸

Spark2.x原始碼分析---spark-submit提交流程

本文以spark on yarn的yarn-cluster模式進行原始碼解析,如有不妥之處,歡迎吐槽。 步驟1.spark-submit提交任務指令碼 spark-submit  --class 主類路徑 \ --master yarn \ --deploy-mode c

第4課Spark Streaming的Exactly Once的事務處理

本期內容: Exactly once 輸出不重複 Exactly once 1,事務一定會被處理,且只被處理一次; 2,輸出能夠輸出且只會被輸出。 Receiver:資料通過BlockManager寫入記憶體+磁碟或者通過WAL來保證資料的安全性。WAL機制:寫資料

40Spark Streaming中KafkaReceiver內幕實現徹底解密

本期內容: 1. KafkaInputDStream原始碼解密 2. KafkaReceiver原始碼解密 Direct方式,是No Receiver方式,和普通Receiver方式,最大的

hadoop2.x入門編寫mapreduce對氣象資料集求每日最高氣溫和最低氣溫

1.下載氣象資料集 我們下載國內的氣象資料,使用下面命令進行下載 wget -D --accept-regex=REGEX -P data -r -c ftp://ftp.ncdc.noaa.gov/pub/data/noaa/2017/5*

第15課Spark Streaming原始碼解讀之No Receivers徹底思考

背景:      目前No Receivers在企業中使用的越來越多。No Receivers具有更強的控制度,語義一致性。No Receivers是我們操作資料來源自然方式,操作資料來源使用一個封裝器,且是RDD型別的。所以Spark Streaming就產生了自定義R

Spark學習之15Spark Streaming執行流程(1)

DStream的所有轉換和計算操作最終會基於該雜湊表中的RDD進行。 1. Receiver啟動 流程如下: Receiver啟動分為兩個部分,一是在Driver端初始化ReceiverTracker等,二是在將所有的Receiver封裝成RDD,併發送的Executor執行。 1.1. Streami

第124課Spark Streaming效能優化通過Spark Streaming進行裝置日誌監控報警及效能優化

通過Spark Streaming進行裝置日誌監控報警及效能優化 1、Spark Streaming進行裝置監控及報警 2、Spark Streaming進行裝置監控效能優化 ELK Stack:一整套開源的日誌處理平臺解決方案,可以集日誌的採集、檢索、視

Spark定製班第9課Spark Streaming原始碼解讀之Receiver在Driver的精妙實現全生命週期徹底研究和思考

本期內容: 1. Receiver啟動的方式設想 2. Receiver啟動原始碼徹底分析 1. Receiver啟動的方式設想   Spark Streaming是個執行在Spark Core上的應用程式。這個應用程式既要接收資料,還要處理資料,這些都是在分散式的

Spark學習筆記Spark StreamingSpark SQL協同工作

Spark Streaming與Spark SQL協同工作 Spark Streaming可以和Spark Core,Spark SQL整合在一起使用,這也是它最強大的一個地方。 例項:實時統計搜尋次數大於3次的搜尋詞 package StreamingDemo i

SpringBoot2.x入門快速建立一個SpringBoot應用

## 前提 這篇文章是《SpringBoot2.x入門》專輯的**第2篇**文章,使用的`SpringBoot`版本為`2.3.1.RELEASE`,`JDK`版本為`1.8`。 常規的套路會建議使用`Spring`官方提供的工具[Spring Initializr](https://start.spri

SpringBoot2.x入門引入web模組

## 前提 這篇文章是《SpringBoot2.x入門》專輯的**第3篇**文章,使用的`SpringBoot`版本為`2.3.1.RELEASE`,`JDK`版本為`1.8`。 主要介紹`SpringBoot`的`web`模組引入,會相對詳細地分析不同的`Servlet`容器(如`Tomcat`、`Je

SpringBoot2.x入門應用打包與啟動

## 前提 這篇文章是《SpringBoot2.x入門》專輯的**第5篇**文章,使用的`SpringBoot`版本為`2.3.1.RELEASE`,`JDK`版本為`1.8`。 這篇文章分析一個偏向於運維方面的內容:`SpringBoot`應用的打包與啟動,分別會分析嵌入式`Servlet`容器和非嵌入

SpringBoot2.x入門使用CommandLineRunner鉤子介面

## 前提 這篇文章是《SpringBoot2.x入門》專輯的**第6篇**文章,使用的`SpringBoot`版本為`2.3.1.RELEASE`,`JDK`版本為`1.8`。 這篇文章主要簡單聊聊鉤子介面`CommandLineRunner`和`ApplicationRunner`,下文有時候統稱兩者

SpringBoot2.x入門使用MyBatis

> 這是公眾號《Throwable文摘》釋出的第**25**篇原創文章,收錄於專輯《SpringBoot2.x入門》。 ## 前提 這篇文章是《SpringBoot2.x入門》專輯的**第8篇**文章,使用的`SpringBoot`版本為`2.3.1.RELEASE`,`JDK`版本為`1.8`。 `S