Spark-Streaming容錯語義

一、背景

為了理解Spark Streaming提供的語義,我們先回顧西Spark RDD的基本容錯語義學。

  1. RDD是一個不可變的、確定性可重新計算的分布式數據集。每個RDD都記住在容錯輸入數據集上用于創建它的確定性操作的沿襲。
  2. 如果RDD的任何分區由于工作節點故障而丟失,則可以使用操作沿襲從原始容錯數據集重新計算該分區。
  3. 假設所有RDD轉換都是確定性的,最終轉換后的RDD中的數據將始終相同,而不管Spark集群中的故障如何

Spark對HDFS或S3等容錯文件系統中的數據進行操作。因此,從容錯數據生成的所有RDD也是容錯的。然而,Spark Streaming并非如此,因為在大多數情況下,數據是通過網絡接收的(使用fileStream時除外)。為了實現所有生成的RDD的相同容錯屬性,接收到的數據將在集群中工作節點的多個Spark executors 之間復制(默認復制因子為2)。這導致系統中有兩種數據需要在發生故障時恢復:

  1. 接收和復制的數據-此數據在單個工作節點發生故障時幸存下來,因為它的副本存在于其他節點之一上
  2. 已接收但為復制而緩沖的數據-由于未復制,因此恢復此數據的唯一方法是從源再次獲取它

此外,我們應該關注兩種失敗:

  1. 工作節點的故障-任何運行執行器的工作節點都可能發生故障,并且這些節點上的所有內存數據都將丟失。如果任何接收器在故障節點上運行,那么它們的緩沖數據將丟失。
  2. 驅動程序節點的故障-如果運行Spark Streaming應用程序的驅動程序節點發生故障,那么顯然SparkContext丟失了,并且所有具有內存數據的執行程序都丟失了。

有了這些基礎知識,我們下面開始學習Spark Streaming的容錯語義學

二、整體語義

流系統的語義學通常是根據系統可以處理每條記錄的次數來捕獲的。系統可以在所有可能的操作條件下(盡管有故障等)提供三種類型的保證。

  1. 最多處理一次:每條記錄要么處理一次,要么根本不處理
  2. 至少一次:每條記錄將被處理一次或多次。這比最多一次更強,因為它確保沒有數據丟失。但可能會有重復。
  3. 精確一次:每條記錄將被精確處理一次 - -- 沒有數據丟失,也沒有數據被多次處理。這顯然是三者中最強大的保證。

在任何流處理系統中,廣義上講,處理數據有三個步驟。

  1. 接收數據:使用接收器或其他方式從源接收數據。
  2. 轉換數據:使用DStream和RDD轉換轉換接收到的數據
  3. 推送數據:最終轉換后的數據被推送到外部系統,如文件系統、數據庫、儀表板等

如果一個流式應用程序必須實現端到端的精確一次保證,那么每個步驟都必須提供精確一次保證。也就是說,每條記錄必須精確接收一次,精確轉換一次,并精確推送到下游系統一次。Spark Streaming采用的是RDD來處理數據,RDD中間的轉化操作都是迭代器模式,可以保證所有接收到的數據將只處理一次。即使出現故障,只要接收到的輸入數據是可訪問的,最終轉換的RDD將始終具有相同的內容。這樣就剩下接收數據和推送數據的保證,這兩點我們再后面結合不同的輸入源提供的保證以及下游系統的不同來進行詳細分析。

三、接收數據語義

不同的輸入源提供不同的保證,從至少一次到恰好一次。

1、輸入源是文件

如果所有輸入數據都已經存在于像HDFS這樣的容錯文件系統中,Spark Streaming總是可以從任何故障中恢復并處理所有數據。這給出了一次語義學,這意味著無論發生什么故障,所有數據都將被處理一次。

2、輸入源是接收器(Receiver)

對于基于接收器的輸入源,容錯語義學取決于故障場景和接收器類型。正如我們之前討論的,有兩種類型的接收器:

  1. 可靠的接收器——這些接收器只有在確保接收到的數據已經被復制后才會確認可靠的來源。如果這樣的接收器發生故障,源將不會收到緩沖(未復制)數據的確認。因此,如果接收器重新啟動,源將重新發送數據,并且不會因故障而丟失數據。
  2. 不可靠的接收器-這種接收器不發送確認,因此當它們由于工作人員或驅動程序故障而失敗時可能會丟失數據

根據使用的接收器類型,如果工作節點發生故障,那么可靠的接收器不會丟失數據。對于不可靠的接收器,接收但未復制的數據可能會丟失。如果driver?發生故障,那么除了這些丟失之外,所有過去在內存中接收和復制的數據都將丟失。這將影響有狀態轉換的結果。

為了避免過去接收到的數據丟失,Spark 1.2引入了預寫日志,將接收到的數據保存到容錯存儲中。由于啟用了預寫日志和可靠的接收器,數據丟失為零。就語義學而言,它提供了至少一次保證。

因此推薦采用的模式為:帶有預寫日志的Spark 1.2或更高版本

3、輸入源是Kafka的Direct API

在Spark 1.3中,引入了一個新的Kafka Direct API,它可以確保Spark Streaming只接收一次所有Kafka數據。

四、輸出數據語義

輸出操作(如foreachRDD)至少有一次語義學,也就是說,在worker 節點失敗的情況下,轉換后的數據可能會多次寫入外部實體。雖然這對于使用saveAs***Files操作保存到文件系統是可以接受的(因為文件將被相同的數據覆蓋),但可能需要額外的努力來實現一次語義學。有兩種方法。

1、冪等更新:多次嘗試總是寫入相同的數據。例如,SaveAs***Files總是將相同的數據寫入生成的文件。

2、事務性更新:所有更新都是以事務性方式進行的,因此更新僅以原子方式進行一次。

  • 使用批處理時間(在foreachRDD中可用)和RDD的分區索引來創建標識符。此標識符唯一標識流應用程序中的blob數據
  • 使用標識符以事務方式(即僅一次原子方式)使用此blob更新外部系統。也就是說,如果標識符尚未提交,請原子方式提交分區數據和標識符。否則,如果已經提交,請跳過更新。
dstream.foreachRDD { (rdd, time) =>rdd.foreachPartition { partitionIterator =>val partitionId = TaskContext.get.partitionId()val uniqueId = generateUniqueId(time.milliseconds, partitionId)// 使用此uniqueId在partitionIterator中事務性提交數據}
}

大多數高校碩博生畢業要求需要參加學術會議,發表EI或者SCI檢索的學術論文會議論文:
可訪問艾思科藍官網,瀏覽即將召開的學術會議列表。會議如下:

第四屆大數據、信息與計算機網絡國際學術會議(BDICN 2025)

  • 廣州
  • https://ais.cn/u/fi2yym

第四屆電子信息工程、大數據與計算機技術國際學術會議(EIBDCT 2025)

  • 青島
  • https://ais.cn/u/nuQr6f

第六屆大數據與信息化教育國際學術會議(ICBDIE 2025)

  • 蘇州
  • https://ais.cn/u/eYnmQr

第三屆通信網絡與機器學習國際學術會議(CNML 2025)

  • 南京
  • https://ais.cn/u/vUNva2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63462.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63462.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63462.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AmpliconSuite-pipeline

AmpliconSuite-pipeline: 多線程支持的端到端工具,用于從配對端全基因組測序數據分析局部拷貝數擴增(如ecDNA或BFB) AmpliconSuite-pipeline 是一個多線程支持的端到端工具,用于 AmpliconArchitect 和 AmpliconClassifier,以支持從配對端全基因組測序數據分析局部拷貝數擴…

QNX通過pfctl工具查看socket通信狀態

通過pfctl -si && pfctl -ss可以查看當前主機IP和外域IP之間的所有socket通信狀態,顯示的格式是 傳輸層協議 | 主機IP | 外域IP | 主機端狀態:外域狀態 ------------------------------------------------------------------------…

Windows安全中心(病毒和威脅防護)的注冊

文章目錄 Windows安全中心(病毒和威脅防護)的注冊1. 簡介2. WSC注冊初探3. WSC注冊原理分析4. 關于AMPPL5. 參考 Windows安全中心(病毒和威脅防護)的注冊 本文我們來分析一下Windows安全中心(Windows Security Center…

JSX和vue模版哪個更好?

JSX和Vue模板各有優缺點,選擇哪種取決于具體需求和個人偏好。? JSX的優點 ?靈活性?:JSX允許在JavaScript代碼中直接插入任意表達式,這使得它在處理復雜邏輯時更加靈活。例如,條件渲染和循環渲染可以通過JavaScript的標準語法…

[代碼隨想錄21回溯]組合問題,電話號碼的字母組合問題

前言 回溯的提出是解決循環問題,回溯的提出就是為了解決排列和組合問題,以及多層遍歷問題,因為如果遍歷的層數越多我們的效率就會越低,回溯加上剪枝能很好解決這個問題。 題目鏈接 77. 組合 - 力扣(LeetCode&#xff…

智能工廠的設計軟件 三種處理單元(NPU/GPU/CPU)及其在深度學習框架中的作用 之2

本文要點 分類學 利用NPU、GPU和CPU的分工協作,實現 一個信息系統架構中的靈活的模塊化框架,該框架使用一個類似元素周期表的分類法,將 該元素周期表 左邊的行矢(時間關系,由應用規格 約束) 、頂上的列簇…

幾款主流的超聲波流量計應用場景梳理

清水應用 這款 聲樂 在含有最少固體或曝氣(≤ 1-2%)的清潔水的情況下表現出色。該儀表融合了卓越的性能和經濟性,使其成為需要外夾式超聲波流量計的應用的理想選擇。它在市政水處理設施中特別有效,其精度和成本效益確保了最佳運行…

Flag 驗證器

Flag 驗證器使用教程 Flag 驗證器 是一種常用工具,用來驗證命令行參數或配置文件中的標志(flag)是否符合預期規則。這些工具可以幫助開發者確保傳入的參數滿足一定的條件,避免因參數錯誤而導致程序運行失敗。以下是對各個驗證器功…

二進制分析的新興趨勢:塑造安全的移動應用

在當今快速發展的數字世界中,保障移動應用的安全性變得尤為重要。隨著移動技術的廣泛應用,安全性需求也日益增強。二進制分析作為確保移動應用安全和合規性的重要手段,通過對已編譯的應用進行深入分析,能夠發現源代碼中難以察覺的…

Python:動態粒子愛心

預覽 代碼結構概述 這段代碼使用了 pygame 庫來創建一個動態的圖形窗口,繪制一個心形圖案,并在其中顯示閃爍的文本。代碼主要分為以下幾個部分: 初始化和設置心形曲線的計算粒子類的定義生成粒子文本設置主循環 1. 初始化和設置 import p…

React源碼02 - 基礎知識 React API 一覽

1. JSX到JavaScript的轉換 <div id"div" key"key"><span>1</span><span>2</span> </div>React.createElement("div", // 大寫開頭會當做原生dom標簽的字符串&#xff0c;而組件使用大寫開頭時&#xff0c;這…

使用DynadotAPI購買域名清倉列表中的過期域名

前言 Dynadot是通過ICANN認證的域名注冊商&#xff0c;自2002年成立以來&#xff0c;服務于全球108個國家和地區的客戶&#xff0c;為數以萬計的客戶提供簡潔&#xff0c;優惠&#xff0c;安全的域名注冊以及管理服務。 Dynadot平臺操作教程索引&#xff08;包括域名郵箱&…

js分頁功能

先聲明些全局變量方便我們在下面的代碼中使用 //一頁有多少條數據 let num 10; //頁碼 let k 0; //總頁數 let divide; // 用來判斷顯示哪幾頁的頁數 let page_num 0; // 聲明一個用于接數據的變量 let datas; // 聲明一個用于接數據的變量 let data; //一頁有多少條數據 l…

CMake Do‘s and Don‘ts (行為準則)

CMake Dos and Donts {行為準則} 1. General2. Modules3. ProjectsReferences Effective Modern CMake https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1 Do’s and Don’ts https://cliutils.gitlab.io/modern-cmake/chapters/intro/dodonot.html dos and …

驗證的分類及相關工具

目錄 1.驗證方法的分類1.1動態驗證1.2.靜態驗證 2.動態驗證及相關工具2.1.電路級仿真工具2.2.邏輯仿真工具 3.靜態驗證及相關工具3.1 形式驗證工具3.2 靜態時序分析工具 SOC設計中驗證包含以下幾個方面&#xff1a; 驗證原始描述的正確性驗證設計的邏輯功能是否符合設計規范的要…

【HarmonyOs學習日志(14)】計算機網絡之域名系統DNS

域名系統DNS 域名系統DNS——從域名解析出IP地址 文章目錄 域名系統DNS概述域名到IP地址的解析 互聯網的域名結構命名標準 域名服務器域名的解析過程 概述 域名系統DNS&#xff08;Domain Name System&#xff09;是互聯網使用的命名系統&#xff0c;用來把便于人們使用的機器…

【Python】pandas庫---數據分析

大學畢業那年&#xff0c;你成了社會底層群眾里&#xff0c;受教育程度最高的一批人。 前言 這是我自己學習Python的第四篇博客總結。后期我會繼續把Python學習筆記開源至博客上。 上一期筆記有關Python的NumPy數據分析&#xff0c;沒看過的同學可以去看看&#xff1a;【Pyt…

【人工智能學習之HDGCN18關鍵點修改】

【人工智能學習之HDGCN18關鍵點修改】 訓練部分修改部分 訓練部分 請參考文章&#xff1a;【人工智能學習之HDGCN訓練自己的數據集】 修改部分 參考源碼中25關鍵點的區域劃分&#xff0c;我們將18關鍵點劃分為&#xff1a; 頭部&#xff1a; 鼻子左眼和左耳右眼和右耳 上肢…

ARCGIS國土超級工具集1.2更新說明

ARCGIS國土超級工具集V1.2版本&#xff0c;功能已增加至47 個。在V1.1的基礎上修復了若干使用時發現的BUG&#xff0c;新增了"矢量分割工具"菜單&#xff0c;同時增加及更新了了若干功能&#xff0c;新工具使用說明如下&#xff1a; 一、勘測定界工具欄更新界址點成果…

華為OD --- 流浪地球

華為OD --- 流浪地球 題目獨立實現基本思路代碼實現 其他答案實現思路代碼實現 題目 獨立實現 基本思路 1、首先把題目給出的啟動機器初始化成數組, 2、用for循環模擬每隔1s更新這個初始化數組的前后兩個機器. (源碼中的updateTimeCount函數) 3、for循環每次循環后會檢查當前…