Spark-Streaming容错语义

news2024/12/24 11:43:30

一、背景

为了理解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.coloradmin.cn/o/2264700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11.vector的介绍及模拟实现

1.vector的介绍 记得之前我们用C语言实现过顺序表,vector本质上也是顺序表,一个能够动态增长的数组。 vector 的底层实现机制 - 动态数组:vector 的底层实现是动态数组。它在内存中连续存储元素,就像一个可以自动调整大小的数…

# 起步专用 - 哔哩哔哩全模块超还原设计!(内含接口文档、数据库设计)

↑ 上方下载文档 (大小374KB) 接口文档预览 (超过50个接口) 一、数据库25张表er-关系清晰构图!(tip: 鼠标右键图片 > 放大图像) 二、难点/经验 详细说明 热门评论排序评论点赞列表|DTO封装经验分享|精华接口文档说明 组员都说喜欢分档对应枚举码 如果这篇文章…

android RecyclerView 垂直显示示例(java)

RecyclerView垂直列表显示示例&#xff0c;显示图片加文字。 1、RecyclerView.Adapter适配器 public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> {private Context mContext;private List<TitleBean> titleBeans;public ListAdapt…

华为云语音交互SIS的使用案例(文字转语音-详细教程)

文章目录 题记一 、语音交互服务&#xff08;Speech Interaction Service&#xff0c;简称SIS&#xff09;二、功能介绍1、实时语音识别2、一句话识别3、录音文件识别4、语音合成 三、约束与限制四、使用1、API2、SDK 五、项目集成1、引入pom依赖2、初始化 Client1&#xff09;…

GitCode 光引计划投稿|智能制造一体化低代码平台 Skyeye云

随着智能制造行业的快速发展&#xff0c;企业对全面、高效的管理解决方案的需求日益迫切。然而&#xff0c;传统的开发模式往往依赖于特定的硬件平台&#xff0c;且开发过程繁琐、成本高。为了打破这一瓶颈&#xff0c;Skyeye云应运而生&#xff0c;它采用先进的低代码开发模式…

网络刷卡器的功能和使用场景

网络刷卡器是一种连接互联网的设备&#xff0c;能够通过网络将读取到的各种卡片信息传输至服务器进行处理。这类刷卡器通常支持多种类型的卡片&#xff0c;如银行卡、身份证、会员卡、公交卡等&#xff0c;并运用现代信息技术确保数据的安全性和高效性&#xff0c;功能十分强大…

从零开始C++游戏开发之第七篇:游戏状态机与回合管理

在游戏开发的道路上&#xff0c;状态管理是一个无法绕开的重要课题。尤其是在棋牌类游戏中&#xff0c;游戏的进行需要有条不紊地按照回合推进&#xff0c;同时管理多个游戏状态&#xff0c;如“等待玩家加入”、“游戏进行中”、“结算阶段”等。如何优雅且高效地实现这些逻辑…

有没有检测吸烟的软件 ai视频检测分析厂区抽烟报警#Python

在现代厂区管理中&#xff0c;安全与规范是重中之重&#xff0c;而吸烟行为的管控则是其中关键一环。传统的禁烟管理方式往往依赖人工巡逻&#xff0c;效率低且存在监管死角&#xff0c;难以满足当下复杂多变的厂区环境需求。此时&#xff0c;AI视频检测技术应运而生&#xff0…

CentOS7网络配置,解决不能联网、ping不通外网、主机的问题

1. 重置 关闭Centos系统 编辑->虚拟网络编辑器 还原默认设置 2. 记录基本信息 查看网关地址,并记录在小本本上 查看网段,记录下 3. 修改网卡配置 启动Centos系统 非root用户,切换root su root查看Mac地址 ifconfig 或 ip addr记录下来 修改配置文件 vim /et…

32岁前端干了8年,是继续做前端开发,还是转其它工作

前端发展有瓶颈&#xff0c;变来变去都是那一套&#xff0c;只是换了框架换了环境。换了框架后又得去学习&#xff0c;虽然很快上手&#xff0c;但是那些刚毕业的也很快上手了&#xff0c;入门门槛越来越低&#xff0c;想转行或继续卷&#xff0c;该如何破圈 这是一位网友的自述…

麒麟操作系统服务架构保姆级教程(三)ssh远程连接

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 作为一名成熟运维架构师&#xff0c;我们需要管理的服务器会达到几十台&#xff0c;上百台&#xff0c;上千台&#xff0c;甚至是上万台服务器&#xff0c;而且咱们的服务器还不一定都在一个机房&am…

Hmsc包开展群落数据联合物种分布模型分析通用流程(Pipelines)

HMSC&#xff08;Hierarchical Species Distribution Models&#xff09;是一种用于预测物种分布的统计模型。它在群落生态学中的应用广泛&#xff0c;可以帮助科学家研究物种在不同环境条件下的分布规律&#xff0c;以及预测物种在未来环境变化下的潜在分布范围。 举例来说&a…

十二月第22讲:巧用mask属性创建一个纯CSS图标库

&#xff08;Scalable Vector Graphics&#xff0c;可缩放矢量图形&#xff09;是一种基于 XML 的图像格式&#xff0c;用于定义二维图形。与传统的位图图像&#xff08;如 PNG 和 JPG&#xff09;不同&#xff0c;SVG 图像是矢量图形&#xff0c;可以在任何尺寸下保持清晰度&a…

单片机:实现驱动超声波(附带源码)

单片机实现驱动超声波模块 超声波模块&#xff08;如HC-SR04&#xff09;广泛应用于距离测量、避障系统、自动驾驶等嵌入式项目中。它能够通过发射超声波信号并接收反射波来计算物体的距离。本文将介绍如何使用单片机&#xff08;如51系列单片机&#xff09;驱动超声波模块&am…

封装(2)

大家好&#xff0c;今天我们来介绍一下包的概念&#xff0c;知道包的作用可以更好的面对今后的开发&#xff0c;那么我们就来看看包是什么东西吧。 6.3封装扩展之包 6.3.1包的概念 在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组…

重温设计模式--命令模式

文章目录 命令模式的详细介绍C 代码示例C代码示例2 命令模式的详细介绍 定义与概念 命令模式属于行为型设计模式&#xff0c;它旨在将一个请求封装成一个对象&#xff0c;从而让你可以用不同的请求对客户端进行参数化&#xff0c;将请求的发送者和接收者解耦&#xff0c;并且能…

基于STM32U575RIT6的智能除湿器

项目说明 除湿器原理 知识点 GPIO、定时器、中断、ADC、LCD屏幕、SHT20、SPI、IIC、UART 功能概述 模块功能LCD屏幕显示温湿度&#xff0c;风机开关情况&#xff0c;制冷 开关情况&#xff0c;加热片开关情况&#xff0c;温 湿度上下阈值&#xff0c;设备ID&#xff0c;电…

【电商搜索】CRM: 具有可控条件的检索模型

【电商搜索】CRM: 具有可控条件的检索模型 目录 文章目录 【电商搜索】CRM: 具有可控条件的检索模型目录文章信息摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果&#xff08;包含重要数据与结论&#xff09;相关工作后续优化方向 后记 https://arxiv.org/pdf/2412.…

【python自动化六】UI自动化基础-selenium的使用

selenium是目前用得比较多的UI自动化测试框架&#xff0c;支持java&#xff0c;python等多种语言&#xff0c;目前我们就选用selenium来做UI自动化。 1.selenium安装 安装命令 pip install selenium2.selenium的简单使用 本文以chrome浏览器为例&#xff0c;配套selenium中c…

Sigrity Optimize PI CapGen仿真教程文件路径

为了方便读者能够快速上手和学会Sigrity Optimize PI和 Deacap Generate 的功能&#xff0c;将Sigrity Optimize PI CapGen仿真教程专栏所有文章对应的实例文件上传至以下路径 https://download.csdn.net/download/weixin_54787054/90171471?spm1001.2014.3001.5503