Spark四:Spark Streaming和Structured Streaming

news2024/11/26 4:49:19

简介

Spark Streaming整体流程和DStream介绍
Structured Streaming发展历史和Dataflow模型介绍
Spark Streaming 是一个基于 Spark Core 之上的实时计算框架,从很多数据源消费数据并对数据进行实时的处理,具有高吞吐量和容错能力强等特点。
在这里插入图片描述
Spark Streaming的特点

  1. 易用:可以像编写离线批处理一样编写流式程序,支持java/scala/python
  2. 容错:在没有额外代码和配置的情况下可以恢复丢失的工作
  3. 易整合到Spark体系:流式处理与批处理和交互式查询相结合

学习资料:https://mp.weixin.qq.com/s/caCk3mM5iXy0FaXCLkDwYQ


一、Spark Streaming整体流程

Spark Streaming中,会有一个接收器组件Receiver,作为一个长期运行的task跑在一个Executor上。Recevier接受外部的数据流形成input DStream。
Dstream。
DStream会被按照时间间隔划分成一批一批的RDD,当批处理间隔缩短到秒级时,便可以用于处理实时数据流。
对DStream进行操作就是对RDD进行操作,计算处理的结果可以传给外部系统。
整体流程如下:
在这里插入图片描述

二、数据抽象

Spark Streaming的基础抽象是DStream(Discretized Stream,离散化数据流,连续不断的数据流),代表持续性的数据流和经过各种 Spark 算子操作后的结果数据流。
可以从多个角度理解DStream:

  1. DStream本质上就是一系列时间上连续的RDD
    在这里插入图片描述

  2. 对DStream的数据进行操作也是按照RDD为单位进行的
    在这里插入图片描述

  3. 容错性,底层RDD之间存在依赖关系,DStream直接也有依赖关系,RDD有容错性,DStream也具有容错性

  4. 准实时性/近实时性
    Spark Streaming将流式计算分解成多个Spark Job,对于每一时间段数据的处理都会经过Spark DAG图分解以及Spark的任务集的调度过程

Spark Streaming虽然能够满足流式实时计算场景,但是对实时性要求非常高的如高频实时交易场景则不太合适。
DStream可以理解为对RDD的封装,对DStream进行操作,就是对RDD进行操作。

三、DStream相关操作

DStream上的操作与RDD相似,分为一下靓装:

  1. Transformations(转换)
  2. Output Operations(输出)/Action

3.1 Transformations

  • 无状态转换:即每个批次的处理不依赖与之前批次的数据
Transformation含义
map(func)对 DStream 中的各个元素进行 func 函数操作,然后返回一个新的 DStream
flatMap(func)与 map 方法类似,只不过各个输入项可以被输出为零个或多个输出项
filter(func)过滤出所有函数 func 返回值为 true 的 DStream 元素并返回一个新的 DStream
union(otherStream)将源 DStream 和输入参数为 otherDStream 的元素合并,并返回一个新的 DStream
reduceByKey(func, [numTasks])利用 func 函数对源 DStream 中的 key 进行聚合操作,然后返回新的(K,V)对构成的 DStream
join(otherStream, [numTasks])输入为(K,V)、(K,W)类型的 DStream,返回一个新的(K,(V,W)类型的 DStream
transform(func)通过 RDD-to-RDD 函数作用于 DStream 中的各个 RDD,可以是任意的 RDD 操作,从而返回一个新的 RDD
  • 有状态转换:当前批次的处理需要使用之前批次的数据或者中间结果,包括基于追踪状态变化的转换(updateStateByKey)和滑动窗口的转换:

    UpdateStateByKey(func)
    Window Operations 窗口操作

3.2 Output/Action

可以将 DStream 的数据输出到外部的数据库或文件系统。
当某个 Output Operations 被调用时,spark streaming 程序才会开始真正的计算过程(与 RDD 的 Action 类似)。

Output Operation含义
print()打印到控制台
saveAsTextFiles(prefix, [suffix])保存流的内容为文本文件,文件名为"prefix-TIME_IN_MS[.suffix]"
saveAsObjectFiles(prefix,[suffix])保存流的内容为 SequenceFile,文件名为 “prefix-TIME_IN_MS[.suffix]”
saveAsHadoopFiles(prefix,[suffix])保存流的内容为 hadoop 文件,文件名为"prefix-TIME_IN_MS[.suffix]"
foreachRDD(func)对 Dstream 里面的每个 RDD 执行 func

四、Spark Streaming完成实时需求举例

4.1 WordCount

计算每个单词出现次数

4.2 updataStateByKey

累加更新每个单词出现次数
使用 updateStateByKey(func)来更新状态

4.3 reduceByKeyAndWindow

需要对指定时间范围的数据进行统计
窗口长度>滑动时间:数据会被重复计算 开发中会使用
窗口长度=滑动时间:数据不会丢失也不会重复计算 开发中会使用
窗口长度<滑动时间:数据丢失

在这里插入图片描述

五、Structured Streaming历史

Spark Streaming使用micro-batch(微批处理)的方式,面对复杂的流式处理场景捉襟见肘,处理延时较高,无法支持基于event_time的时间窗口做聚合逻辑。
Structure Streaming是一个基于Spark SQL引擎的可扩展、容错的流处理引擎

5.1 API

Spark Streaming采用的抽象数据是RDD
在这里插入图片描述
Structured Streaming采用的抽象数据是Dataset/DataFrame
在这里插入图片描述

5.2 核心思想

将实时到达的数据看作是一个不断追加的 unbound table 无界表,到达流的每个数据项(RDD)就像是表中的一个新行被附加到无边界的表中。
用户可以用静态结构化数据的批处理查询方式进行流计算,如可以使用 SQL 对到来的每一行数据进行实时查询处理。

5.3 应用场景(结构化的实时数据)

将数据源映射为类似于关系数据库中的表,然后将经过计算得到的结果映射为另一张表,完全以结构化的方式去操作流式数据,这种编程模型非常有利于处理分析结构化的实时数据

5.4 Structured Streaming实战

5.4.1 读取Socket数据

5.4.2 读取目录下文本数据

5.4.3 计算操作

5.4.4 输出

  1. 计算结果可以输出到多种设备并进行如下设定
  1. output mode:以哪种方式将 result table 的数据写入 sink,即是全部输出 complete 还是只输出新增数据;
  2. output mode:以哪种方式将 result table 的数据写入 sink,即是全部输出 complete 还是只输出新增数据;
  3. query name:指定查询的标识。类似 tempview 的名字;
  4. trigger interval:触发间隔,如果不指定,默认会尽可能快速地处理数据;
  5. checkpointLocation: 一般是 hdfs 上的目录。注意:Socket 不支持数据恢复,如果设置了,第二次启动会报错,Kafka 支持。
  1. 三种输出模式
  1. Append mode:默认模式,新增的行才输出,每次更新结果集时,只将新添加到结果集的结果行输出到接收器。仅支持那些添加到结果表中的行永远不会更改的查询。因此,此模式保证每行仅输出一次。例如,仅查询 select,where,map,flatMap,filter,join 等会支持追加模式。不支持聚合
  2. Complete mode:所有内容都输出,每次触发后,整个结果表将输出到接收器。聚合查询支持此功能。仅适用于包含聚合操作的查询。
  3. Update mode:更新的行才输出,每次更新结果集时,仅将被更新的结果行输出到接收器(自 Spark 2.1.1 起可用),不支持排序
  1. Output sink

file sink:Update mode:更新的行才输出,每次更新结果集时,仅将被更新的结果行输出到接收器(自 Spark 2.1.1 起可用),不支持排序

writeStream .format("parquet")        // can be "orc", "json", "csv", etc.
   .option("path", "path/to/destination/dir")
   .start()

Kafka sink:将输出存储到 Kafka 中的一个或多个 topics 中

writeStream.format("kafka")
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("topic", "updates")
  .start()

Foreach sink:对输出中的记录运行任意计算
Console sink:将输出打印到控制台

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

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

相关文章

年终护眼台灯哪个好用?适合学生备考的台灯推荐

最近临近寒假&#xff0c;就有好多家长们和高校学子们催我推荐护眼台灯&#xff0c;人眼对光是非常敏感的&#xff0c;特别是儿童青少年眼睛还在发育的状态来说&#xff0c;光线是至关重要的&#xff0c;于是这次选择的护眼台灯我都是经过亲自使用测试的。 但由于现在护眼台灯…

【Java 进阶篇】Linux 常用命令使用详解:玩转命令行的魔法世界

在计算机的世界里&#xff0c;Linux是一个强大而富有魅力的操作系统。对于很多小白用户来说&#xff0c;刚接触Linux时可能感觉有些陌生&#xff0c;尤其是在命令行界面下。然而&#xff0c;正是这个看似晦涩的命令行&#xff0c;才是Linux系统最为强大和灵活的地方。本文将围绕…

ubuntu桥接方式上网

vmvare:VMware Workstation 17 Pro ubuntu: Ubuntu 14.04.6 LTS window10 下面是我的电脑配置 下面是ubuntu虚拟机的配置 vi /etc/network/interfaces 下面的gateway就是window -ipconfig 截图里的默认网关 auto lo iface lo inet loopbackauto eth0 iface eth0 inet stat…

Vue CLI初识

脚手架Vue CLI 基本介绍 Vue CLI 是Vue官方提供的一个全局命令工具 可以帮助我们快速创建一个开发Vue项目的标准化基础架子。【集成了webpack配置】 好处 开箱即用&#xff0c;零配置内置babel等工具标准化的webpack配置 使用步骤 全局安装&#xff08;只需安装一次即可…

APP上线前需要通过哪些测试?如何获取专业的APP测试报告

互联网信息时代&#xff0c;人们最离不开的就是手机&#xff0c;而手机里面吸引我们的也就是APP软件里各式各样好玩的。但一款APP要想在竞争激烈的市场上留存下来&#xff0c;上线前的软件测试就必不可少&#xff0c;那么APP上线前需要通过哪些测试呢?又该如何获取专业的APP测…

Lumerical------创建一个 90 度弯曲波导

Lumerical------创建一个 90 度弯曲波导 引言正文方法1------自定义90度弯曲波导方法2------使用内置集成好的90度弯曲结构引言 90 度弯曲波导在 PIC 中非常常见,如何在 Lumerical 中创建类似的结构呢?这里我们特来说明一下。 正文 方法1------自定义90度弯曲波导 在 Str…

【常用排序算法】快速排序

##快速排序 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高&#xff0c;因此经常被采用&#xff0c;再加上快速排序思想----分治法 先从数列中取出一个数作为基准数pivot。分区过程&#xff0c;将比这个数大的数全放到它的右边&#xff0c;小于或等于它的数全放…

AI绘图模型不会写字的难题解决了

介绍 大家好&#xff0c;最近有个开源项目比较有意思&#xff0c;解决了图像中不支持带有中文的问题。 https://github.com/tyxsspa/AnyText。 为什么不能带有中文&#xff1f; 数据集局限 Stable Diffusion的训练数据集以英文数据为主&#xff0c;没有大量包含其他语言文本的…

做个很小众的应用就可以月入数万,为什么多数程序员都不做个人开发?

开发一款程序并不是难题&#xff0c;难题是&#xff0c;你开发出来后要怎么进行推广&#xff1f; 说个扎心的事实&#xff0c;我最开始以为是学会了代码开发就可以自己去开发程序赚钱&#xff0c;后面才发现&#xff0c;那只不过是我的一厢情愿罢了。 最近明白了一个道理&…

bootstrap5实现蛋糕店网页Bakery设计模板

一、需求分析 蛋糕店的网页通常是指蛋糕店的官方网站。这些网页的功能可以因店铺而异&#xff0c;但一般会包含以下内容&#xff1a; 主页&#xff1a;主页通常是网站的起点&#xff0c;展示店铺的品牌形象、特色蛋糕和推广信息。主页通常会设计成吸引人眼球、易于导航的页面。…

什么是DigiCert证书?

DigiCert作为全球知名的证书颁发机构&#xff0c;以其卓越的品质和全面的服务&#xff0c;为用户的数据安全保驾护航。 一、为何选择DigiCert证书&#xff1f; 权威认证&#xff1a;DigiCert与全球众多知名企业和政府机构合作&#xff0c;拥有广泛的认可度。高安全性&#xff…

babel执行流程

babel简单执行流程 为了验证方便 这边 使用的命令是 babel src/index.js --out-file lib/index.compiled.js,这样可以定位 babel 中的files.js 相对目录比较简单 执行scripts 中的 build 命令 执行 package.json 中的scripts 命令 <!-- package.json 中的命令 -->"…

【C语言】stdbool.h——有关bool的总结

在编程和日常生活中&#xff0c;经常需要一种只能具有两个值之一的数据类型&#xff0c;如是否、开关、真假等&#xff0c;因此&#xff0c;C 有一种bool数据类型&#xff0c;称为booleans。布尔值表示 或true的值false。 C 中的 bool 是大多数语言中的基本数据类型&#xff0…

SwiftUI 打造一款可收缩的 HStack(二):对齐+ZStack

概览 在上篇 SwiftUI 打造一款可收缩的 HStack(一):“原汤化原食” 博文里,我们讨论了如何用 HStack 自身来实现可收缩的“HStack”。 而在本篇中,我们将尝试利用 SwiftUI 对齐 + ZStack 的方式完成相同的功能。 在本篇博文中,您将学到以下内容: 概览1. SwiftUI 中的对…

开源游戏引擎:创造无限可能 | 开源专题 No.56

godotengine/godot Stars: 62.6k License: MIT Godot Engine 是一个功能强大的跨平台游戏引擎&#xff0c;可用于创建 2D 和 3D 游戏。它提供了一套全面的常见工具&#xff0c;让用户可以专注于制作游戏而不必重复造轮子。该引擎支持将游戏一键导出到多个平台上&#xff0c;包…

期货跟单系统。镜像跟单系统有什么作用?功能有哪些?

期货跟单系统&#xff1a; 期货自动跟单系统&#xff0c;是一款专门用来针对特定账户的操作而进行自动跟单的软件。软件兼容目前所有的期货公司账户&#xff0c;具有稳定性&#xff0c;速度性和可靠性的优势。 补差补点&#xff0c;根据盘手实盘心理分析&#xff0c;增加模拟…

C#编程-描述内存分配

描述内存分配 分配给变量的内存通过两种方式引用&#xff1a;值类型和引用类型。内置数据类型&#xff0c;诸如int、char和float都是值雷兴国。当您声明int变量时&#xff0c;编译器会分配一个内存块以保持该整数值。请思考以下语句&#xff1a; int Num 50;上述语句为保存值…

深入理解可变参数

目录 1.C语言方式 1.1.宏介绍 1.2.原理详解 1.3.案例分析 1.4.其他实例 2.C之std::initializer_list 2.1.简介 2.2.原理详解 2.3.案例分析 3.C之可变参数模版 3.1.简介 3.2.可变参数个数 3.3.递归包展开 3.4.逗号表达式展开 3.5.Lambda 捕获 3.6.转发参数包 4…

YOLOv5算法进阶改进(13)— 更换上采样方式之CARAFE | 轻量级通用上采样算子

前言:Hello大家好,我是小哥谈。CARAFE算子是一种上采样运算符,全称为Content-Aware ReAssembly Feature Extraction,它在图像语义分割任务中被广泛应用。CARAFE算子通过学习像素之间的关系来进行上采样,从而提高了图像分割的精度。CARAFE算子的优势在于它能够根据图像的内…

Hotspot源码解析-第十二章-线程栈保护页

了解保护页&#xff0c;先从几个问题开始吧 1、为什么线程栈有栈帧了&#xff0c;还要有保护页&#xff1f; 答&#xff1a;在操作系统中内存可以看成是一个大数组&#xff0c;这就有一个问题&#xff0c;线程之间可能会互相踩了别人的内存空间&#xff0c;所以栈空间也存在这…