欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Spark進行實時流計算的方法

 更新時間:2020年08月04日 09:11:02   作者:獨孤風(fēng)  
這篇文章主要介紹了用Spark進行實時流計算的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Spark Streaming VS Structured Streaming

Spark Streaming是Spark最初的流處理框架,使用了微批的形式來進行流處理。

提供了基于RDDs的Dstream API,每個時間間隔內(nèi)的數(shù)據(jù)為一個RDD,源源不斷對RDD進行處理來實現(xiàn)流計算

Apache Spark 在 2016 年的時候啟動了 Structured Streaming 項目,一個基于 Spark SQL 的全新流計算引擎 Structured Streaming,讓用戶像編寫批處理程序一樣簡單地編寫高性能的流處理程序。

Structured Streaming是Spark2.0版本提出的新的實時流框架(2.0和2.1是實驗版本,從Spark2.2開始為穩(wěn)定版本)

從Spark-2.X版本后,Spark Streaming就進入維護模式,看見Spark已經(jīng)將大部分精力投入到了全新的Structured Streaming中,而一些新特性也只有Structured Streaming才有,這樣Spark才有了與Flink一戰(zhàn)的能力。

1、Spark Streaming 不足

Processing Time 而不是 Event Time

首先解釋一下,Processing Time 是數(shù)據(jù)到達 Spark 被處理的時間,而 Event Time 是數(shù)據(jù)自帶的屬性,一般表示數(shù)據(jù)產(chǎn)生于數(shù)據(jù)源的時間。比如 IoT 中,傳感器在 12:00:00 產(chǎn)生一條數(shù)據(jù),然后在 12:00:05 數(shù)據(jù)傳送到 Spark,那么 Event Time 就是 12:00:00,而 Processing Time 就是 12:00:05。我們知道 Spark Streaming 是基于 DStream 模型的 micro-batch 模式,簡單來說就是將一個微小時間段,比如說 1s,的流數(shù)據(jù)當前批數(shù)據(jù)來處理。如果我們要統(tǒng)計某個時間段的一些數(shù)據(jù)統(tǒng)計,毫無疑問應(yīng)該使用 Event Time,但是因為 Spark Streaming 的數(shù)據(jù)切割是基于 Processing Time,這樣就導(dǎo)致使用 Event Time 特別的困難。

Complex, low-level api

這點比較好理解,DStream (Spark Streaming 的數(shù)據(jù)模型)提供的 API 類似 RDD 的 API 的,非常的 low level。當我們編寫 Spark Streaming 程序的時候,本質(zhì)上就是要去構(gòu)造 RDD 的 DAG 執(zhí)行圖,然后通過 Spark Engine 運行。這樣導(dǎo)致一個問題是,DAG 可能會因為開發(fā)者的水平參差不齊而導(dǎo)致執(zhí)行效率上的天壤之別。這樣導(dǎo)致開發(fā)者的體驗非常不好,也是任何一個基礎(chǔ)框架不想看到的(基礎(chǔ)框架的口號一般都是:你們專注于自己的業(yè)務(wù)邏輯就好,其他的交給我)。這也是很多基礎(chǔ)系統(tǒng)強調(diào) Declarative 的一個原因。

reason about end-to-end application

這里的 end-to-end 指的是直接 input 到 out,比如 Kafka 接入 Spark Streaming 然后再導(dǎo)出到 HDFS 中。DStream 只能保證自己的一致性語義是 exactly-once 的,而 input 接入 Spark Streaming 和 Spark Straming 輸出到外部存儲的語義往往需要用戶自己來保證。而這個語義保證寫起來也是非常有挑戰(zhàn)性,比如為了保證 output 的語義是 exactly-once 語義需要 output 的存儲系統(tǒng)具有冪等的特性,或者支持事務(wù)性寫入,這個對于開發(fā)者來說都不是一件容易的事情。

批流代碼不統(tǒng)一

盡管批流本是兩套系統(tǒng),但是這兩套系統(tǒng)統(tǒng)一起來確實很有必要,我們有時候確實需要將我們的流處理邏輯運行到批數(shù)據(jù)上面。關(guān)于這一點,最早在 2014 年 Google 提出 Dataflow 計算服務(wù)的時候就批判了 streaming/batch 這種叫法,而是提出了 unbounded/bounded data 的說法。DStream 盡管是對 RDD 的封裝,但是我們要將 DStream 代碼完全轉(zhuǎn)換成 RDD 還是有一點工作量的,更何況現(xiàn)在 Spark 的批處理都用 DataSet/DataFrame API 了。

2.、Structured Streaming 優(yōu)勢

相對的,來看下Structured Streaming優(yōu)勢:

  • 簡潔的模型。Structured Streaming 的模型很簡潔,易于理解。用戶可以直接把一個流想象成是無限增長的表格。
  • 一致的 API。由于和 Spark SQL 共用大部分 API,對 Spaprk SQL 熟悉的用戶很容易上手,代碼也十分簡潔。同時批處理和流處理程序還可以共用代碼,不需要開發(fā)兩套不同的代碼,顯著提高了開發(fā)效率。
  • 卓越的性能。Structured Streaming 在與 Spark SQL 共用 API 的同時,也直接使用了 Spark SQL 的 Catalyst 優(yōu)化器和 Tungsten,數(shù)據(jù)處理性能十分出色。此外,Structured Streaming 還可以直接從未來 Spark SQL 的各種性能優(yōu)化中受益。
  • 多語言支持。Structured Streaming 直接支持目前 Spark SQL 支持的語言,包括 Scala,Java,Python,R 和 SQL。用戶可以選擇自己喜歡的語言進行開發(fā)。
  • 同樣能支持多種數(shù)據(jù)源的輸入和輸出,Kafka、flume、Socket、Json。
  • 基于Event-Time,相比于Spark Streaming的Processing-Time更精確,更符合業(yè)務(wù)場景。
  • Event time 事件時間: 就是數(shù)據(jù)真正發(fā)生的時間,比如用戶瀏覽了一個頁面可能會產(chǎn)生一條用戶的該時間點的瀏覽日志。
  • Process time 處理時間: 則是這條日志數(shù)據(jù)真正到達計算框架中被處理的時間點,簡單的說,就是你的Spark程序是什么時候讀到這條日志的。
  • 事件時間是嵌入在數(shù)據(jù)本身中的時間。對于許多應(yīng)用程序,用戶可能希望在此事件時間操作。例如,如果要獲取IoT設(shè)備每分鐘生成的事件數(shù),則可能需要使用生成數(shù)據(jù)的時間(即數(shù)據(jù)中的事件時間),而不是Spark接收他們的時間。事件時間在此模型中非常自然地表示 - 來自設(shè)備的每個事件都是表中的一行,事件時間是該行中的一個列值。
  • 支持spark2的dataframe處理。
  • 解決了Spark Streaming存在的代碼升級,DAG圖變化引起的任務(wù)失敗,無法斷點續(xù)傳的問題。
  • 基于SparkSQL構(gòu)建的可擴展和容錯的流式數(shù)據(jù)處理引擎,使得實時流式數(shù)據(jù)計算可以和離線計算采用相同的處理方式(DataFrame&SQL)。
  • 可以使用與靜態(tài)數(shù)據(jù)批處理計算相同的方式來表達流計算。

底層原理完全不同

Spark Streaming采用微批的處理方法。每一個批處理間隔的為一個批,也就是一個RDD,我們對RDD進行操作就可以源源不斷的接收、處理數(shù)據(jù)。

Structured Streaming將實時數(shù)據(jù)當做被連續(xù)追加的表。流上的每一條數(shù)據(jù)都類似于將一行新數(shù)據(jù)添加到表中。

Spark 3.0.0發(fā)布以后 全新的Structured Streaming UI誕生,可見未來的Structured Streaming將不斷迎來進步。

總結(jié)

到此這篇關(guān)于使用Spark進行實時流計算的方法的文章就介紹到這了,更多相關(guān)Spark實時流計算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Elasticsearch設(shè)置密碼的方法與驗證

    Elasticsearch設(shè)置密碼的方法與驗證

    在Elasticsearch中設(shè)置密碼是為了保護您的數(shù)據(jù)安全,下面這篇文章主要給大家介紹了關(guān)于Elasticsearch設(shè)置密碼方法與驗證的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • ChatGPT幫我看下這段代碼有什么問題

    ChatGPT幫我看下這段代碼有什么問題

    今天一個很簡單的功能,觸發(fā)了一個 BUG,處理后我想起了最近爆火的 ChatGPT,于是我嘗試測試 ChatGPT 能否發(fā)現(xiàn)這個 BUG,這篇文章會先介紹功能代碼,然后手動分析 BUG 原因,需要的朋友可以參考下
    2023-02-02
  • ceph集群RadosGW對象存儲使用詳解

    ceph集群RadosGW對象存儲使用詳解

    這篇文章主要為大家介紹了ceph集群RadosGW對象存儲使用詳解,有需要的,朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • http post 415錯誤的解決方法

    http post 415錯誤的解決方法

    這篇文章主要介紹了http post 415錯誤的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 使用阿里大于(大魚)平臺進行發(fā)送手機驗證碼的流程

    使用阿里大于(大魚)平臺進行發(fā)送手機驗證碼的流程

    這篇文章主要介紹了使用阿里大于(大魚)平臺進行發(fā)送手機驗證碼的流程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • Ceph分布式存儲集群Pool資源池簡介及使用小結(jié)

    Ceph分布式存儲集群Pool資源池簡介及使用小結(jié)

    這篇文章主要介紹了Ceph分布式存儲集群Pool資源池的概念以及使用,Pool資源池是Ceph存儲數(shù)據(jù)的邏輯分區(qū),起到Namespace命名空間的作用,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2022-06-06
  • chatgpt國內(nèi)鏡像?pycharm?idea插件使用詳解

    chatgpt國內(nèi)鏡像?pycharm?idea插件使用詳解

    這篇文章主要介紹了chatgpt國內(nèi)鏡像?pycharm?idea插件使用詳解,本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • Uint?和?int?的區(qū)別解析

    Uint?和?int?的區(qū)別解析

    Int與Uint的區(qū)別在于帶符號與不帶符號,在計算機中根據(jù)補碼進行互相轉(zhuǎn)換,很多語言是有方法支持的,但是也有一些并沒有轉(zhuǎn)換方法,比如SQLserver(SQLserver不支持Uint類型),下面詳細介紹Uint?和?int?的區(qū)別,感興趣的朋友一起看看吧
    2023-08-08
  • 將WSL系統(tǒng)更換國內(nèi)源的方法(固定路徑+國內(nèi)鏡像源+詳細教程)

    將WSL系統(tǒng)更換國內(nèi)源的方法(固定路徑+國內(nèi)鏡像源+詳細教程)

    這篇文章主要介紹了將WSL系統(tǒng)更換國內(nèi)源的方法(固定路徑+國內(nèi)鏡像源+詳細教程),首先找到wsl鏡像源,替換鏡像源,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • 詳細講解HDFS的高可用機制

    詳細講解HDFS的高可用機制

    本文詳細講解了HDFS的高可用機制。如果namenode出現(xiàn)問題,整個HDFS集群將不能使用,HDFS高可用(HA)方案就是為了解決這個問題而產(chǎn)生的,讓我們一起來了解了解吧
    2021-08-08

最新評論