Spark四:Spark Streaming和Structured Streaming

简介

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:将输出打印到控制台

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【完整流程】实现STM32+ESP8266+MQTT+阿里云+APP——【第二节-编写STM32程序初步实现ESP8266上云发布订阅消息】

&#x1f31f;博主领域&#xff1a;嵌入式领域&人工智能&软件开发 前言&#xff1a;本节实现&#xff0c;硬件连接STM32与ESP8266&#xff0c;编写STM32程序通过at命令方式实现STM32ESP8266与阿里云物联网平台发布订阅消息&#xff0c;本节最终实现初步的发布订阅消息…

2024年阿里云服务器按年与按带宽活动价格出炉,最低仅需61元/1年

2024年阿里云服务器活动价格出炉了&#xff0c;新版活动价格表分为按年与按带宽两个价格表&#xff0c;按年最高可选择5年&#xff0c;按带宽可选择按量付费带宽和按固定带宽模式&#xff0c;按年活动价格最低61元/1年&#xff0c;按照带宽模式最低365.33元/1年&#xff0c;不同…

深情回忆VB编程之路

深情回忆VB编程之路 在上世纪90年代末&#xff0c;我与编程世界的初次邂逅始于QBasic这一古老而亲切的语言。那时的编程环境虽然简陋&#xff0c;但却蕴藏着无穷的可能性&#xff0c;每个字符仿佛跳跃着生命&#xff0c;在黑色屏幕中编织出我对编程世界最初的憧憬和梦想。 时光…

计算机网络学习笔记(5)——运输层

本文继续整理计算机网络体系架构知识内容。今日主讲——运输层。 网络层只把分组发送到目的主机&#xff0c;但是真正通信的并不是主机而是主机中的进程。 运输层提供了应用进程间的逻辑通信。运输层向高层用户屏蔽了下面网络层的核心细节&#xff0c;使应用程序看 见的好像在两…

JavaScript基本使用方法

JavaScript 是一种脚本语言&#xff0c;常用于 Web 开发。这里是一些基本的使用方法&#xff1a; 声明变量&#xff1a; 在 JavaScript 中&#xff0c;可以使用 var、let 或 const 关键字来声明变量。例如&#xff1a; var age 25; let name "John"; const PI …

【51单片机】点亮第一个LED灯(含创建文件等基础操作)

51单片机现在不仅是电子信息专业学生的必修课&#xff0c;也是进入嵌入式领域的踏脚石。 本系列将会按照江科大的视频进行&#xff0c;也算是相当于一个笔记&#xff0c;进行巩固 实现第一个LED灯的点亮其实并不复杂&#xff0c;重要的是有一些准备工作比较繁琐&#xff0c;就…

Android RecyleView 使用 Gilde 加载图片引发的卡顿问题

Glide 是一个用于 Android 的图片加载和缓存库。它可以帮助开发者快速、高效地加载网络图片、本地文件和视频帧&#xff0c;并且能够自动缓存图片数据&#xff0c;减少网络请求。Glide 具有良好的性能和易用的 API&#xff0c;支持常见的图片加载需求&#xff0c;例如图片压缩、…

局部与整体的关联特性,如图所示

局部与整体的关联特性是指事物的局部部分与整体之间存在一定的关联关系。它强调整体是由局部构成&#xff0c;局部又反向影响整体。具体包括以下几个方面的特性&#xff1a; 互依性&#xff1a;局部与整体相互依赖&#xff0c;一个的变动会影响另一个的变动。局部的变化会对整体…

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

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

vue3 vuedraggable draggable element must have an item slot

vue3vite 看官网使用这种<template #item“{ element }”> <draggablev-model"myArray"start"onStart"end"onEnd":sort"false"item-key"id"draggable".item"handle".mover" ><template…

java发送邮件到qq邮箱

自己的授权码自己记好 引入依赖 <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version> </dependency> <dependency><groupId>javax.mail</groupId>&…

机器视觉系统选型-镜头选型常见误区—焦距选择公式

视觉工程师在选择镜头时经常要用到一个公式来选择镜头的焦距。根据这个公式&#xff0c;如果 已知芯片大小、拍摄视野和工作距离的要求&#xff0c;可以算出镜头的焦距。在大部分情况下&#xff0c;这个 公式是可以用的。但这只是一个近似公式&#xff0c;有些情况下使用这个公…

广义双曲分布、KS检验与抄底沪指

上一篇笔记我们抛出一个问题&#xff0c;沪指大跌 4%时&#xff0c;能不能抄底&#xff1f;今天的笔记&#xff0c;我们就通过 KS 检验&#xff0c;找出沪指的概率分布&#xff0c;进而回答这个问题。在后面的笔记中&#xff0c;我们还将换一个方法继续回答这个问题。 K-S 检验…

Matlab/F#/R进行数据分析和建模算法的经验,vb.net输给他了

微软放弃了vb.net的开发&#xff0c;但是持续花费巨资投入F#,简单一看他的语法就是qbasic ,vb6一样。鹿死谁手&#xff0c;谁能相信vb.net竟然被f#给干掉了。外面有vb6语法的python成了全球第一的编程语言,内部还有强大的教授开发的这工具扯后腿。 有人说为什么中国搞不出像mat…

漏洞复现--天融信TOPSEC两处远程命令执行

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(6)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置&#xff08;5&#xff09; 2.2 HOST主桥 本节以MPC8548处理器为例&#xff0c;说明HOST主桥在PowerPC处理器中的实现机制&#xff0c;并简要介绍x86处理器系统使用的HOST主桥。 …

一文讲透Stata计量经济学中如何分中东西区域回归?

stata如何分中东西区域回归本质上是异质性检验。 异质性检验即针对样本进行分类分组&#xff0c;基于各组样本分别开展的实证检验。异质性检验通常在基准回归之后&#xff0c;基准回归依据的是全部的样本&#xff0c;当基准回归得到的结果较为显著&#xff0c;即核心解释变量显…

多线程基础入门【Linux之旅】——上篇【线程控制,线程互斥,线程安全】

目录 前文 回望页表 一&#xff0c;什么是线程 二&#xff0c;使用 pthread_create &#xff08;线程创建&#xff09; 三&#xff0c;线程控制 1 &#xff0c;线程共享进程数据&#xff0c;但也拥有自己的一部分数据: 2&#xff0c; 线程 VS 进程优点 3&#xff0c;…

服务器内存介绍

本篇文章用于介绍服务器内存&#xff0c;包括基本概念、内存演进、规格识别、内存条配置规则等 1、基本概念 服务器内存是指安装在服务器主板上的用于存储和处理数据的硬件组件。它是服务器中的主要性能关键因素之一&#xff0c;对于服务器的运行速度、多任务处理能力和数据处…

Linux 进程(九) 进程等待

子进程退出&#xff0c;父进程如果不管不顾&#xff0c;就可能造成‘僵尸进程’的问题&#xff0c;进而造成内存泄漏&#xff0c;所以父进程回收子进程是必然要做的。 另外&#xff0c;进程一旦变成僵尸状态&#xff0c;那就刀枪不入&#xff0c;“杀人不眨眼”的kill …