Spark(36):Structured Streaming 编程模型

news2024/10/11 2:22:55

目录

0. 相关文章链接

1. 的核心思想

2. 基本概念

2.1. 输入表

2.2. 结果表

2.3. 输出

2.4. 快速入门代码的再次说明

3. 处理事件-时间和延迟数据(Handling Event-time and Late Data)

4. 容错语义


0. 相关文章链接

 Spark文章汇总 

1. 的核心思想

        Structured Streaming 的核心思想是:把持续不断的流式数据当做一个不断追加的表。这使得新的流式处理模型同批处理模型非常相像。 我们可以表示我们的流式计算类似于作用在静态数表上的标准批处理查询, spark 在一个无界表上以增量查询的方式来运行。

2. 基本概念

2.1. 输入表

把输入数据流当做输入表(Input Table)。 到达流中的每个数据项(data item)类似于被追加到输入表中的一行。

2.2. 结果表

        作用在输入表上的查询将会产生“结果表(Result Table)”。 每个触发间隔(trigger interval, 例如 1s), 新行被追加到输入表, 最终会更新结果表。 无论何时更新结果表, 我们都希望将更改的结果行写入到外部接收器(external sink)。

2.3. 输出

输出(Output)定义为写到外部存储。 输出模式(outputMode)有 3 种:

  • Complete Mode 整个更新的结果表会被写入到外部存储。 存储连接器负责决定如何处理整个表的写出(类似于 spark streaming 中的有转态的转换)。
  • Append Mode 从上次触发结束开始算起, 仅仅把那些新追加到结果表中的行写到外部存储(类似于无状态的转换)。 该模式仅适用于不会更改结果表中行的那些查询。 (如果有聚合操作, 则必须添加 wartemark, 否则不支持此种模式)
  • Update Mode 从上次触发结束开始算起, 仅仅在结果表中更新的行会写入到外部存储。 此模式从 2.1.1可用。 注意, Update Mode 与 Complete Mode 的不同在于 Update Mode 仅仅输出改变的那些行。 如果查询不包括聚合操作, 则等同于 Append Mode 

2.4. 快速入门代码的再次说明

        lines DataFrame是“输入表”, wordCounts DataFrame 是“结果表”, 从输入表到结果表中间的查询同静态的 DataFrame 是一样的。 查询一旦启动, Spark 会持续不断的在 socket 连接中检测新的数据, 如果其中有了新的数据, Spark 会运行一个增量(incremental)查询, 这个查询会把前面的运行的 count 与新的数据组合在一起去计算更新后的 count。

        注意, Structured Streaming 不会实现整个表。 它从流式数据源读取最新的可用数据, 持续不断的处理这些数据, 然后更新结果, 并且会丢弃原始数据。 它仅保持最小的中间状态的数据, 以用于更新结果(例如前面例子中的中间counts)

3. 处理事件-时间和延迟数据(Handling Event-time and Late Data)

        Structured streaming 与其他的流式引擎有很大的不同。 许多系统要求用户自己维护运行的聚合, 所以用户自己必须推理数据的一致性(at-least-once, or at-most-once, or exactly-once)。 在Structured streaming模型中, 当有新数据的时候, spark 负责更新结果表, 从而减轻了用户的推理工作。

我们来看下这个模型如何处理基于事件时间的处理和迟到的数据:

        Event-time 是指嵌入到数据本身的时间, 或者指数据产生的时间。 对大多数应用程序来说, 我们想基于这个时间去操作数据。 例如, 如果我们获取 IoT(Internet of Things) 设备每分钟产生的事件数, 我们更愿意使用数据产生时的时间(event-time in the data), 而不是 spark 接收到这些数据时的时间。

        在这个模型中, event-time 是非常自然的表达。 来自设备的每个时间都是表中的一行, event-time 是行中的一列。 允许基于窗口的聚合(例如, 每分钟的事件数)仅仅是 event-time 列上的特殊类型的分组(grouping)和聚合(aggregation): 每个时间窗口是一个组,并且每一行可以属于多个窗口/组。因此,可以在静态数据集和数据流上进行基于事件时间窗口( event-time-window-based)的聚合查询,从而使用户操作更加方便。

        此外, 该模型也可以自然的处理晚于 event-time 的数据, 因为spark 一直在更新结果表, 所以它可以完全控制更新旧的聚合数据,或清除旧的聚合以限制中间状态数据的大小。自 Spark 2.1 起,开始支持 watermark 来允许用于指定数据的超时时间(即接收时间比 event-time 晚多少),并允许引擎相应的清理旧状态。

4. 容错语义

        提供端到端的exactly-once语义是 Structured Streaming 设计的主要目标。 为了达成这一目的, spark 设计了结构化流数据源, 接收器和执行引擎(Structured Streaming sources, the sinks and the execution engine)以可靠的跟踪处理的进度, 以便能够对任何失败能够重新启动或者重新处理。

        每种流数据源假定都有 offsets(类似于 Kafka offsets) 用于追踪在流中的读取位置。 引擎使用 checkpoint 和 WALs 来记录在每个触发器中正在处理的数据的 offset 范围。 结合可重用的数据源(replayable source)和幂等接收器(idempotent sink), Structured Streaming 可以确保在任何失败的情况下端到端的 exactly-once 语义。


注:其他Spark相关系列文章链接由此进 ->  Spark文章汇总 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/790018.html

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

相关文章

4、非线性数据结构

上一节课我们讲了线性数据结构,这一节我们说下非线性数据结构。 非线性数据结构,从字面意思来看,就是指不是线性的结构。线性结构的特点是只有一个前驱和一个后继。 那么非线性结构的特点就是有多个前驱或后继了。 如果只存在一个没有前驱的…

第一次编程测试(分频器)

一,分频器 定义 分频器(Divider)是一种电子电路或设备,用于将输入信号的频率降低到较低的频率。它常用于数字系统、通信系统和计时应用中。原理 整数分频器使用计数器来实现频率的降低。计数器根据输入信号的边沿触发进行计数&am…

STM32MP157驱动开发——按键驱动(中断)

文章目录 编写使用中断的按键驱动程序编程思路设备树相关驱动代码相关 代码修改设备树文件gpio_key_drv.cMakefile编译测试 编写使用中断的按键驱动程序 对于使用中断的按键驱动,内核自带的驱动程序 drivers/input/keyboard/gpio_keys.c 就可以,需要做的…

❛‿˂̵✧ THU数据结构(上)(2023spring) 完成啦(⑅˃◡˂⑅)

实际上来讲,是课程截止到今天晚上( ◔︎ ‸◔︎) 总结一下,放假十来天,边敲边听。后期有些地方应该再复习复习。 接下来的关于数据结构的目标 〇 把(上)中没敲完的结构敲完 〇 ZJU的配套题目写完 〇 学习&#xff…

linux系统GHOST备份方案

linux系统GHOST备份方案 Windows系统备份可以用ghost工具软件完成,Linux系统不能完全依赖于ghost工具,一则是ghost本身是有版权的软件,二则ghost只支持ext2、ext3文件系统的Linux分区,不支持reiserfs、xfs等比较高级的文件系统&a…

9.python设计模式【外观模式】

内容:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一个子系统更加容易使用。 角色: 外观(facade)子类系统(subsystem classes) UML图 举…

拉密

拉密,又称以色列麻将。 游戏人数为2-4人。 和扑克牌一样,一套是52张,4个花色,每个花色1到13。 拉密数字牌由106张塑料牌组成,包含2套牌和2张万能牌。 一张是可以指定成暖色任意牌,一张可以指定成冷色任意…

草稿#systemverilog# 说说《队列》 那些事儿

最近不断使用到systemverilog 语言编程中的队列语法。今天抽时间,尽肯能全的整理一下队列的相关用法,一是加固基础打牢,而是在代码编写过程中,提高代码水平。 队列是一种复合数据结构,可以用来存储多个数据的容器,但同时又拥有自己的优势特性。正如绿皮书所言,队列的引…

1-2 AUTOSAR分层架构

目录 一、简介 二、基础软件层 BSW 2.1 微控制器抽象层 2.2 ECU抽象层 2.3 复杂的驱动程序 2.4 服务层 三、运行时环境 RTE 四、应用软件层 SWC 一、简介 AUTOSAR架构在最高的抽象级别上区分了三个软件层: 应用程序层(APPL)运行时环…

macOS Monterey 12.6.8 (21G725) Boot ISO 原版可引导镜像

macOS Monterey 12.6.8 (21G725) Boot ISO 原版可引导镜像 本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows 和 Lin…

我的个人项目

项目介绍: 项目主要是使用vue3开发,利用前端技术,实现一些功能和游戏,并不是真正意义上的项目 功能概况介绍: 1. 记账(app端页面记录日常消费和收入) 2. 常用网站的管理 3. 文本内容检索 4. …

iptables安全技术和防火墙

防火墙:隔离功能 位置:部署在网络边缘或主机边缘,在工作中,防火墙的主要作用是决定哪些数据可以被外网访问以及哪些数据可以进入内网访问,主要在网络层工作 其他类型的安全技术:1、入侵检测系统 2、入侵…

vue2生命周期图

生命周期全过程如下👇详解 一:生命周期之创建阶段 1.创建一个Vue实例【new Vue()】 2.初始化Vue实例,第一次初始化,初始化Vue当中的事件和生命周期方法【Init Events Lifecycle】 ☆☆☆调用生命周期方法当中的beforCreate,调用这个方法的时候有一个特点,就是在调…

自动化运维工具--saltstack部署及使用

目录 一、saltstack简介 1、介绍 2、Salt的核心功能 3、saltstack通信机制 二、saltstack部署 1、部署环境 2、配置yum源 3、安装master与minion 4、连接认证master和minion 三、salt运行 1、执行格式 2、实操演示 一、saltstack简介 1、介绍 saltstack是一个配置管…

[护网杯 2018]easy_tornado1

进入环境后有三个路径链接 访问/flag提示会说flag在/fllllllllllag里 值得注意的是访问后网页url发生的变化,这里居然有两个参数 替换掉filename的值后页面url再次发生变化,网页只有一个msg传参的数据 访问welcome.txt,只是回显了一个render…

一个灵活、现代的Android应用架构

一个灵活、现代的Android应用架构 学习Android架构的原则:学习原则,不要盲目遵循规则。 本文旨在通过示例演示实际应用:通过示范Android架构来进行教学。最重要的是,这意味着展示出如何做出各种架构决策。在某些情况下&#xff0…

qt登录框

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口的设置this->setFixedSize(500, 400); //设置固定大小this->setWindowOpacity(0.95); //设置透明度this->setWindowTitle("鹏哥快聊"); // this->setWin…

【node-1】node validation exception. bootstrap checks failed

记录ElasticSearch 内存分配不足报错 背景做出的改变说在最后:最后访问es: 背景 从报错信息中看到,文件,虚拟内存的最大值太低,我们需要调整设置虚拟内存大小,以满足ElasticSearch 运行需求。 做出的改变 …

WPF icon的设置

想给控件设置个圆形图片&#xff0c;代码如下&#xff1a; ​<Setter Property"Icon"><Setter.Value><Image Source"/WpfApp1;component/Resource/1.ico" Width"16" Height"16"/></Setter.Value></Setter&…

面向对象编程:从创建类到封装与构造方法的探索

1. 代码如何创建类&#xff1f; 在面向对象编程中&#xff0c;类是对一类事物的抽象&#xff0c;包含了静态的属性&#xff08;成员变量&#xff09;和动态的行为&#xff08;成员方法&#xff09;。在Java中&#xff0c;创建类的格式如下&#xff1a; 修饰词 class 类名 {//…