Spark流式编程介绍 -编程模型

【spark床头书系列】Spark Structured Streaming 编程权威指南 Spark Structured Streaming 编程权威指南,看一篇就够了 阅读详情

来源Spark官方文档
http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#programming-model

编程模型

结构化流中的核心概念就是将活动数据流当作一个会不断增长的表。这是一个新的流处理模型,但是与批处理模型很相似。你在做流式计算就像是标准针对静态表的批查询,Spark会在一个无限输入的表上进行增量查询。我们来从更多详细内容来理解这个模型。

基本概念

将输入的数据流理解为“写入表”,每个流中到达的数据就像是写入表中新增的一行。
Stream as a Table
针对输入的查询会生成“结果表”。每个触发间隔之间(比如1秒钟),就会有新的行添加到“写入表”,最终更新结果表。当结果表变更后,我们能够将变更的结果行写入外部存储。
Model
“输出(Output)”定义为写入外部存储的内容。输出存在几种模式:

  • 完全模式(Complete Mode) :整个更新后的结果表会全部写入外部存储。具体的全表写入方式取决于与存储的底层连接。
  • 增量模式(Append Mode) :从上次触发后的新增结果表数据才会写入外部存储。这个模式只适用于那些预期结果表中的存量数据不会变化的查询。
  • 更新模式(Update Mode) : 从上次触发后的更新结果表数据才会写入外部存储(从Spark 2.1.1开始生效)。注意本模式和完全模式的差异,本模式下只会输出上次触发后的变更行。如果查询不包含聚合,基本会和增量模式相同。

要注意每个模式都有确定的适配的查询,这个会在稍后讨论。
为了解释这个模型的使用方式,我们用上面的快速示例来辅助理解模型。第一个DataFrame类型的变量 line 就是写入表,而最后DataFrame类型的变量 wordCounts 就是结果表。注意针对流的查询方法,从 line 生成 wordCounts 和一个静态的DataFrame完全相同。当查询开始之后,Spark会持续检查从socket链接传入的新数据。如果存在新数据,Spark会运行“增量”查询,并且针对新数据计算更新的计数,整合之前运行的计数,如下图所示。
Model
注意结构化流并没有存储整张表。从数据源读取最近有效的数据,增量的处理并且更新结果数据,然后丢弃源数据。Spark只保留最小中间状态数据,用于更新结果(例如上面例子中的中间统计结果计数)。
这个模型明显和其他的流处理引擎不同。许多流处理系统要求用户自行维护运行聚合,因为有诸如容错性(fault-tolerance)、数据一致性(data consistency:at-least-once, at-most-once, exactly-once)。在这个模型中,当有新数据时,由Spark负责更新结果表,因此解放了用户无需关注。我们以模型处理事件时间和延迟数据作为例子来看下。

处理事件时间和延迟数据

事件时间是包含在数据本身的。很多应用都希望基于事件时间操作。例如你的想要获取物联网设备每分钟产生事件数量,然后你可能希望使用数据生成的时间(这就是事件时间),而不是Spark接收到他们的时间。事件时间在这个模型中是很自然的,因为每个设备产生事件都是都是表中的一行数据,而事件时间就是一行数据中的一列。这样基于窗口的聚合(例如每分钟的事件数量)可以作为基于事件时间列做的特别的分组和聚合。每个时间窗口都是一个分组,每行数据也可以属于多个窗口或分组。因此类似这种基于事件时间的聚合查询能够在静态数据集(例如收集的设备事件日志)和动态数据流,能够是用户的使用比较简单。
此外模型天然的能够基于事件时间处理延迟到达的数据。当Spark更新结果表时,他仍然能够针对延迟数据来更新历史聚合的结果,也同时可以清除历史聚合数据,从而限制中间状态数据的大小。从Spark2.1开始,我们支持水位线概念(watermarking),允许用户指定延迟数据的阈值,系统也能够清理旧状态数据。稍后会在窗口操作章节介绍。

容错性

保证唯一投送端到端是结构化流的设计中的关键目标之一。为了达成这样的目标,我们设计了结构化流的源(Source)、汇(Sink)以及执行引擎能够可靠的跟踪处理进度,从而能够重启/重新处理来应对各种故障。每个数据流的源应该都有偏移量概念(类似Kafka的偏移量,或者Amazon Kinesis 的序列编号)来跟踪流中的读取位置。引擎使用保存点和先写日志来记录每次处理的数据偏移边界。流的汇设计天然就支持重新处理的幂等性。整合起来,使用可重放的源与幂等的汇,结构化流在面对任何故障时都能保证端对端严格一致性(end-to-end exactly-once semantics)。

Spark Streaming初步使用以及工作原理详解 一、流式计算 1.什么是流? Streaming:是一种数据传送技术,它把客户机收到的数据变成一个稳定连续的 流,源源不断地送出,使用户听到的声音或看到的图象十分平稳,而且用户在 整个文件送完之前就可以开始在屏幕上浏览文件。 2.常见的流式计算框架 Apache Storm Spark Streaming Apache Samza 上述三种实时计算系统都是开源的分布式系统,具有低延迟、可扩展和容错性 诸多优点,它们的共同特色在于:允许你在运行数据流代码时,将任务分配到 一系列具有容错能力的计算机 阅读详情

相关推荐

Spark Streaming编程基础

本实战演示了如何使用 Spark Streaming 实现实时词频统计。通过创建 Spark Streaming 项目,添加依赖,编写 Scala 代码,监听网络端口接收数据流,并按批次处理数据。利用 `nc` 工具发送数据,程序每10秒统计一次词频并输出结果。该示例展示了 Spark Streaming 的微批处理特性,适用于实时数据处理场景。

howard2005的专栏 1617

Java的Spark与流式大数据处理

1.背景介绍 1. 背景介绍 随着数据的增长和复杂性,传统的批处理技术已经无法满足现代大数据处理的需求。流式计算技术成为了处理实时大数据的主流方式。Apache Spark是一个开源的流式大数据处理框架,它可以处理批量数据和流式数据,并提供了丰富的数据处理功能。 在本文中,我们将深入探讨Java的Spark与流式大数据处理,涵盖其核心概念、算法原理、最佳实践、应用场景和实际应用。 2. 核...

AI天才研究院 1809

Spark(36) -- Spark Streaming原理与架构

1. Spark Streaming原理 2. Spark Streaming计算流程 3. Spark Streaming实时性 4. Spark的架构

erainm 328

Spark每日半小时(29)——结构化流式编程:编程模型

编程模型 结构化流中的关键思想是将实时数据流视为连续追加的表。这导致新的流处理模型非常类似于批处理模型。我们将流式计算表示为静态表上的标准处理查询,Spark将其作为无界输入表上的增量查询运行。接下来我们更详细的去了解这个模型。 基本概念 将输入数据流视为“输入表”。到达流的每个数据项都像一个新行被附加到输入表。 对输入的查询将生成“结果表”。每个出发间隔(例如,每1秒),新行将附加到...

DK_ing的博客 384

python可视化篇之流式数据监控的实现

主要介绍了python可视化篇之流式数据监控的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

02-Cesium-实现天地图标记

首先天地图申请token,然后Cesium-实现天地图标记详细说明

m0_62785037的博客 1171

十四、流式编程(1)

● 流支持 ● 流创建 ○ 随机数流 ○ int 类型的范围 ○ generate() ○ iterate() ○ 流的建造者模式 ○ Arrays ○ 正则表达式

走在bug的路上 1万+

STM32F407+LAN8720网口不通?别慌,手把手教你用CubeMX和HAL库搞定RMII配置与调试

本文详细介绍了STM32F407与LAN8720网口不通的全面排查与解决方法,涵盖硬件检查、CubeMX配置、PHY芯片初始化和LWIP协议栈优化。通过RMII接口配置、时钟树设置和PHY芯片调试,帮助开发者快速定位并解决网络连接问题,提升嵌入式网络开发效率。

weixin_30457551的博客 506

一文入门大数据准流式计算引擎Spark【万字详解,全网最新】

Spark发展、特点、概述,三大组件:Spark Core、Saprk SQL、Spark Streaming,RDD算子、RDD转换和行动操作、RDD持久化和缓存、检查点机制、宽窄依赖、DAG、Stage,Spark SQL发展、概述、特点、dataframe、dataset,Spark Streaming工作机制、缓存、容错、DStream、常见流式计算和离线计算,Spark多种部署方式

qq_73181349的博客 2067

先进封装技术 Part03---重布线层(RDL)的科普

RDL是一种在芯片封装过程中用于重新分布电气连接的技术。它通过在芯片表面或中介层上形成额外的布线层,重新分配芯片的I/O(输入/输出)位置,以适应不同的封装需求和提高电气连接的灵活性。

阿拉伯梳子的专栏 4701

SigmaStudio进阶技巧:如何用ADAU1701实现60段EQ与防啸叫算法

本文深入探讨了如何在ADAU1701 DSP芯片上实现专业级音频处理系统。通过精密的资源规划与架构设计,详细讲解了构建高达60段参数均衡器(EQ)的有效方法,并集成了移频与自适应陷波双策略的智能防啸叫算法。内容涵盖从SigmaStudio工程优化、算法模块组合到系统联调实战的全流程,旨在帮助中高级开发者充分利用ADAU1701性能,打造稳定、高效的音频处理解决方案。

weixin_28256233的博客 384

Spark每日半小时(28)——结构化流式编程:概览、示例

概览 结构化流是一种基于Spark SQL引擎的可扩展且容错的流式处理引擎。我们可以像表达静态数据的批处理计算一样表达流式计算。Spark SQL引擎将负责逐步和连续地运行它,并在流数据持续到达时更新最终结果。我们可以使用Scala,Java,Python或R中地Dataset/DataFrame API来表示流聚合,事件事件窗口,流到批处理连接等。计算在同一优化的Spark SQL引擎上执行。...

DK_ing的博客 472

opencode : 无法将“opencode“项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

opencode命令识别问题与openclawcodexgemini确保的路径在 PATH 中。这个知识对所有 npm 全局工具通用。

一键难忘的博客 4520

Spark流式编程介绍 - 编程模型

Spark流式编程介绍 - 编程模型 来源Spark官方文档 http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#programming-model 编程...

weixin_30662109的博客 144

4、基于抽象解释的静态分析器中的跟踪分区与ASTRÉE分析器解析

本博客探讨了基于抽象解释的静态分析器中的跟踪分区技术,并深入解析了ASTRÉE分析器的工作原理和应用。通过示例程序说明了跟踪分区如何提升分析精度,减少误报,以及ASTRÉE如何利用多种数值抽象域(如八角形域、浮点区间线性形式等)来处理复杂的嵌入式C程序。此外,还讨论了ASTRÉE的模块化设计、循环展开优化、用户断言与自动细化的局限性等内容,为保障嵌入式软件的安全性和可靠性提供了理论与实践支持。

kotlin6android的博客 117

对halcon形状匹配算法的一点分析

基于Intel VTune Profiler对halcon形状匹配算法的一点分析

manuoo的专栏 566

Spark编程模型-RDD

Spark编程模型 Spark编程模型是弹性分布式数据集(Resilient Distributed Dataset,RDD),是MapReduce模型的扩展和延伸; * 基于RDD机制实现了多类模型计算,如:* 1. 迭代计算; 2. 交互式SQL查询; 3. MapReduce RDD; 4. 流式数据处理。 Spark中的操作大致分为四类; ...

木子先森 409

第154章 点云大规模并行处理(GPU加速)

优化点云处理✨ 使用。

yumeiguo的博客 374

spark:Structured Streaming介绍

spark:Structured Streaming介绍

m0_70882914的博客 1684

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

一文读懂 Spark 和 Spark Streaming

前言 Apache Spark 是当今最流行的开源大数据处理框架。和人们耳熟能详的 MapReduce 一样,Spark 用于进行分布式、大规模的数据处理,但 Spark 作为 MapReduce 的接任者,提供了更高级的编程接口、更高的性能。除此之外,Spark 不仅能进行常规的批处理计算,还提供了流式计算支持。 Apache Spark 诞生于大名鼎鼎的 AMPLab(这里还诞生过 Mes...

360linker 1825

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

StructuredStreaming -- 01 【概述,编程模型,source,sink】

文章目录Structured Streaming1、 回顾1.1、Spark 编程模型的进化过程总结1.2、Spark 的 序列化 的进化过程1.2.1、 什么是序列化和序列化?1.2.2、 在 `Spark` 中的序列化和反序列化的应用场景1.2.3、 RDD 的序列化1.2.4、 DataFrame 和 Dataset 中的序列化总结1.3、Spark Streaming 和 Structured Streaming2、 Structured Streaming 入门案例2.1、需求梳理2.2、 代码实

xiaoxiao______的博客 1165

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Apache Spark【从无到有从有到无】【编程指南】【AS5】结构化流编程指南

目录 1.概观 2.快速示例 3.编程模型 3.1.基本概念 3.2.处理事件时间和延迟数据 3.3.容错语义 4.使用数据集和数据框架的API 4.1.创建streaming DataFrames 和 streaming Datasets 4.1.1.输入源(Input Sources) 4.1.2.流式数据帧/数据集(streaming DataFrames/Dataset...

琴韵悠悠 524

spark总结

核心概念:RDD是基本数据处理模型,具备弹性、分布式等特性,拥有分区列表、计算函数等核心属性,其执行涉及资源申请、任务划分与调度。此外,还介绍了累加器和广播变量,用于分布式环境下的数据聚合与对象分发。编程操作:包括创建RDD的多种方式,如从集合、外部存储等;RDD转换算子分为Value、双Value和Key - Value类型,各有不同的操作函数;行动算子用于触发实际计算,返回结果或进行存储。同时,讲解了RDD的序列化、依赖关系、持久化和分区器等内容。

2402_88408747的博客 390

spark算子_spark理论和RDD算子

Spark简介什么是Spark?Spark 是基于内存计算的通用大规模数据处理框架Spark已经融入了Hadoop生态系统,可支持的作业类型和应用场景比MapReduce更为广泛,并且具备了MapReduce所有的高容错性和高伸缩性特点。为什么会诞生Spark并不是所有的问题都可以简单的分解成Map和Reduce两步模型处理Mapreduce 缺点1、 延迟高: 不适合交互式SQL分析2、 迭代计...

weixin_39812186的博客 76

Spark五之Structured-Streaming

文章目录Structured Streaming简介快速入门Programming Model(编程模型)1.输入表2.结果表3.输出方式Kafka SourceForeach(单行)|ForeachBatch(多行) sink(输出)foreach sink 会遍历表中的每一行, 允许将流查询结果按开发者指定的逻辑输出。ForeachBatch Sink 是 spark 2.4 才新增的功能, 该功能只能用于输出批处理的数据。基于 event-time 的窗口操作基于 Watermark 处理延迟数据 S

FY_07170424的博客 3380

结构化流的介绍

数据可以分为有界数据和无界数据,结构化流的数据结构是无界的,介绍了结构化流的编程模型,数据结构,数据源,重点介绍可Spark和Kafka的整合

denglh525693的博客 1455
上一篇: 互联网安全设计剑与盾
下一篇: 企业代码版本管理之争:TrunkBased vs GitFlow vs AoneFlow vs OneFlow vs ExeFlow
陈晨_软件五千言
陈晨_软件五千言 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄20年 91粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值