大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点

news2024/12/25 1:56:18

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(正在更新!)

章节内容

上节我们完成了如下的内容:

  • Spark SQL JOIN
  • Boardcast JOIN
  • Shuffle JOIN
  • SQL解析过程
  • SparkSQL 常见的优化逻辑

在这里插入图片描述

背景概述

随着大数据技术的不断发展,人们对于大数据的实时性处理要求也不断提高,传统的MapReduce等批处理框架在某些特定领域,例如实时用户推荐、用户行为分析这些应用场景上逐渐不能满足人们对实时性的需求,因为诞生了一批如 S3、Samza、Storm、Flink等流式分析、实时计算框架。

Spark Streaming 是 Spark 核心组件之一,用于实时数据处理。它能够将实时数据流分批处理,转换为可操作的分布式数据集 (RDDs),从而实现流数据的实时处理和分析。

基本概念

  • DStream: DStream(离散流)是 Spark Streaming 中的核心抽象,代表一个连续的数据流。它可以来自 Kafka、Flume、HDFS、Socket 等数据源,或者由现有的 RDD 经过转换产生。
  • Batch Interval: 数据流被划分为多个小批次,每个批次在指定的时间间隔(例如 1 秒或 10 秒)内进行处理,这个时间间隔称为 Batch Interval。

架构概念

Spark Streaming 的架构主要包括如下组件:

  • 输入源: Spark Streaming 支持多种输入源,如 Kafka、Flume、HDFS、S3 等。
  • 处理引擎: 核心是 Spark Core 的 RDD 处理引擎,利用它来执行批处理操作。
  • 输出操作: 处理后的数据可以输出到文件系统、数据库、仪表板等。

编程模型

Spark Streaming 使用与 Spark 相同的编程模型,支持常见的 Map、Reduce、Join、Window 等操作。你可以通过在 DStream 上调用这些操作来进行实时数据处理。

  • Transformation: 如 map、flatMap、filter 等。
  • Window Operations: Spark Streaming 提供了基于时间窗口的操作,例如窗口化计算,通过 window 和 slide 函数实现。
    在这里插入图片描述

容错性

  • 检查点机制: 为了处理故障和保证数据一致性,Spark Streaming 提供了检查点机制,可以将中间状态保存到可靠的存储系统(如 HDFS),从而在故障恢复时重建这些状态。
  • 数据重放: 在 Kafka 等消息队列中,消息是基于偏移量的,这使得 Spark Streaming 可以在故障发生时重新处理未处理的消息,确保数据的可靠性和一致性。

什么是 Spark Streaming

  • Spark Streaming 类似于 Apache Storm(来一条处理一条、延迟低、响应快、吞吐量低),用于流式数据的处理。

  • Spark Streaming 具有高吞吐量和容错能力强的特点。

  • Spark Streaming 支持的数据输入源很多,例如:Kafka(最重要的数据源)、Flume、TCP套接字等。

  • 数据输入后可用高度抽象API:map reduce join window等进行运算

  • 处理结果可存 HDFS、数据库等

  • Spark Streaming 可以与 MLib、GraphX融合

    在这里插入图片描述
    Spark Streaming 与 Spark 基于RDD的概念比较类似,Spark Streaming 使用离散化流(Discretized Stream)作为抽象表示,成为 DStream。
    DStream是随着时间推移而收到的数据的序列,在内部,每个时间区间收到的数据都作为RDD存在,DStream是由这些RDD所组成的序列。
    在这里插入图片描述

DStream 可以从各种输入源创建,比如 Flume、Kafka或者HDFS,创建出来的DStream支持两种操作:

  • 转化操作,会生成一个新的DStream
  • 输出操作(output operation),把数据写入外部系统中

DStream 提供了许多与RDD所支持的操作相类似的操作支持,还增加了与时间相关的的新操作,比如滑动窗口。

Spark Streaming 架构

Spark Streaming 使用 mini-batch 架构,把流式计算当作一系列连续的小规模批处理来对待。
Spark Streaming 从各种输入源中读取数据,并把数据分组小批次,新的批次按均匀的时间间隔创建出来。
在每个时间区间开始的时候,一个新的批次就创建出来,在该区间内收到的数据都会被添加到这个批次中,在时间区间结束时,批次停止增长。

时间区间的大小是由批次间隔这个参数决定的,批次间隔一般设置在500ms到几秒之间,由开发者配置。
每个输入批次都形成一个RDD,以Spark作业的方式处理并生成其他的RDD,处理的结果可以批处理的方式传给外部的系统。

在这里插入图片描述
Spark Streaming的编程抽象是离散化流,也就是DStream。它是一个RDD序列,每个RDD代表数据流中的一个时间片内的编程。

在这里插入图片描述

应用于DStream上的转换操作都会转换为底层RDD上的操作。如对行DStream中的每个RDD应用FlatMap操作以生成单词DStream的RDD。

在这里插入图片描述

这些底层RDD转换是Spark引擎完成的,DStream操作隐藏了大部分的细节,为开发人员提供了更高级的API以方便使用。

Spark Streaming为每个输入源启动对应的接收器,接收器运行在Executor中,从输入源收集数据并保存为RDD。
默认情况下接收到数据后会复制到另一个Executor中,进行容错。
Driver中的 StreamingContext 会周期性的运行 Spark作业来处理这些数据。
在这里插入图片描述

Spark Streaming运行流程

  • 客户端提交Spark Streaming作业后启动Driver,Driver启动Receiver,Receiver接收数据源的数据
  • 每个作业包含多个Executor,每个Executor以线程的方式运行Task,Spark Streaming至少包含一个Receive Task(一般情况下)
  • Receive接收数据后生成Block,并把BlockId汇报给Driver,然后备份到另一个Executor上
  • ReceiveTracker维护Receiver汇报的BlockId
  • Driver定时启动JobGenerator,根据DStream的关系生成逻辑RDD,然后创建JobSet,交给JobScheduler。
  • JobScheduler 负责调度JobSet,交给DAGScheduler,DAGScheduler根据逻辑RDD,生成Stages,每个Stage包含一到多个Task,将Task提交给TaskScheduler。
  • TaskScheduler负责把Task调度到Executor上,并维护Task的运行状态

Spark Streaming 优缺点

与传统流式框架相比,Spark Streaming 最大的不同点在与它对待数据是粗粒度的处理方式,即一次处理一小批数据,而其他框架往往采用细粒度的处理模式,即依次处理一条数据,Spark Streaming这样的设计实现既为其带来了显而易见的优点,又引入了不少不可避免的缺点。

优点概括

  • Spark Streaming 内部的实现和调度方式高度依赖Spark的DAG调度器和RDD,这就决定了Spark Streaming的设计初衷必须是粗粒度的方式的。同时,由于Spark内部调度器足够快速和高效,可以快速地处理小批量数据,这就获得准实时的特性
  • Spark Streaming 的粗粒度执行方式使其确保 “处理且仅处理一次”的特性(EOS),同时也可以更方便地实现容错恢复机制
  • 由于Spark Streaming的DStream本质上RDD在流式数据上的抽象,因为基于RDD的各种操作也有相应的基本DStream的版本,这样就大大降低了用户对于新框架的学习成本,在了解Spark的情况下用户将很容易使用Spark Streaming。
  • 由于 DStream 是在RDD上的抽象,那么也就更容易与RDD进行交互操作,在需要将流式数据和批处理数据结合进行分析的情况下,将会变得方便。

缺点概括

  • Spark Streaming 的粗粒度处理方式也造成了不可避免的延迟,在细粒度处理方式下,理想情况下每一条记录都会被实时处理,而在Spark Streaming中,数据需要汇总到一定量都再一次性处理,这么增加了数据处理的延迟,这种延迟是由框架设计引入的,并不是由网络或其他情况造成的。

Structured Streaming

Spark Streaming 计算逻辑是把数据按时间划分为DStream,存在以下问题:

  • 框架自身只能根据BatchTime单元进行数据处理,很难处理基于EventTime(即时间戳)的数据,很难处理延迟,乱序的数据
  • 流式和批量处理的API不完全一致,两种使用场景中,程序代码还是需要一定的转换
  • 端到端的数据容错保障逻辑需要用户自己构建,难以处理增量更新和持久化存储等一致性问题

基于以上问题,提出了下一代 Structure Streaming。将数据源映射为一张无界长度的表,通过表的计算,输出结果映射为另一张表。
以结构化的方式去操作流式数据,简化了实时计算过程,同时还复用Catalyst引擎来优化SQL操作,此外还能支持增量计算和基于EventTime的计算。

与 Kafka 集成

Kafka 是 Spark Streaming 最常用的消息队列之一。通过 Kafka 与 Spark Streaming 的紧密集成,可以实现高吞吐量、低延迟的流数据处理。

  • Direct Approach: 直接从 Kafka 读取数据,不需要中间的 Receiver,确保了精确一次的语义。
  • Offset 管理: 可以手动管理 Kafka 的偏移量,保证在出错时可以继续处理上次未处理的消息。

应用场景

  • 实时监控: 使用 Spark Streaming 可以实现系统和应用程序的实时监控与报警系统。
  • 日志处理: 处理实时生成的日志数据,进行在线分析和异常检测。
  • 金融分析: 用于实时处理股票交易、风险评估等金融数据。
    -社交媒体分析: 实时分析社交媒体数据,监测舆情和用户行为。

性能调优

  • 并行度: 通过增加并行度来提高吞吐量。
  • 内存管理: 需要合理设置内存参数,防止 OOM 错误。
  • 反压机制: Spark Streaming 提供了背压机制,可以动态调整数据处理速率,防止系统过载。

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

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

相关文章

C语言与Python的区别

一、言语类型Python是一种基于解说器的言语,解说器会逐行读取代码;首先将Python编译为字节码,然后由大型C程序解说;C是一种编译言语,完好的源代码将直接编译为机器代码,由CPU直接履行。 二、内存办理Python…

寄蜉蝣于天地,渺沧海之一粟

工具 1、Zulip 一个开源的群聊软件,有服务端和各种平台的客户端。 2、win-vind 这个工具为 Windows 系统提供 Vim 风格的快捷键,也可以把它当作 Windows 的快捷键设定器。 3、canvas-confetti 在网页上抛洒五彩纸屑的 JS 库。 4、WR.DO 一个开源的 W…

让老周都道歉的360手表,难道是AI模型的锅吗?

360集团创始人、董事长周鸿祎在微博发文,对360儿童手表出现错误问答一事致歉。周鸿祎表示,今天在网上看到视频反映我们某型号的儿童手表出现错误的问答,给用户带来不适,我们表示真诚的歉意。 经过快速检查,出现问题的这…

快手主站前端工程化探索:Gundam 脚手架在新春除夕项目中的实践与展望

一、背景与目标 1.1 背景 Gundam 作为快手主站前端的脚手架,成立于2022年底。当时主站前端的整体工程化建设,从开发准备阶段到开发、联调、测试、部署、运维整个全流程, 其中偏后链路的持续集成和持续部署、错误监控排障,依赖于…

中科服务器磁盘未断电状态被人拔插导致raid故障,安装系统找不到系统盘 修复raid再次安装系统成功

1,根据提示按del进入bios 直接回车 改成good状态保存(多块盘的话重复此操作即可,直到让盘的状态显示good或者online) 然后回到上级导入raid信息 raid信息导入 设置成yes,然后保存退出 然后他会自己同步数据&…

SSM健康生活博客小程序—计算机毕业设计源码23497

摘 要 本文设计了一种基于SSM框架的健康生活博客小程序,为人们提供了运动视频教学、博客信息分享,用户能够方便快捷地查看资讯、搜索健康方面的相关信息、还能发布个人生活博客等。健康生活博客小程序采取面对对象的开发模式进行软件的开发和硬体的架设&…

基于x86 平台opencv的图像采集和seetaface6的性别识别功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的性别识别功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的性别识别模块从而实现…

未来城市的科技展望

未来城市,‌将是科技与人文深度融合的产物,‌展现出一个全方位智能化、‌绿色生态且可持续发展的全新面貌。‌随着物联网、‌人工智能等技术的飞速发展,‌未来城市的轮廓逐渐清晰,‌它将为我们带来前所未有的生活体验。‌ 在未来…

Linux驱动学习之点灯(六,利用平台设备总线)

平台设备总线 平台设备总线是内核虚拟的一条总线,早期没有设备树时,通过名字匹配设备信息,如今有设备树通过设备树里的complitable属性匹配,下图是平台设备总线的结构体描述。 much函数是完成信息匹配的, 总线就是使用…

Python 编程 之 tkinter : 导航栏与局部页面切换

import tkinter as tk class App: def __init__(self, root): self.root root self.root.title("导航栏与局部页面切换") self.root.geometry(800x500)self.root.minsize(width800, height300)# 创建导航栏 self.navbar tk.Frame(self.root, bggray) self.n…

TIM输出比较之PWM驱动直流电机应用案例

文章目录 前言一、应用案例演示二、电路接线图三、应用案例代码四、应用案例分析4.1 初始化PWM模块4.1.1 RCC开启时钟4.1.2 配置时基单元4.1.3 配置输出比较单元4.1.4 配置GPIO4.1.5 运行控制 4.2 PWM输出模块4.3 电机模块4.3.1 Motor初始化模块4.3.2 电机调速模块 4.4 主程序 …

0基础学习Python路径(21)Python NameSpaceScope

命名空间定义了在某个作用域内变量名和绑定值之间的对应关系,命名空间是键值对的集合,变量名与值是一一对应关系。作用域定义了命名空间中的变量能够在多大范围内起作用。 命名空间在 Python 解释器中是以字典的形式存在的,是以一种可以看得…

Linux Nvidia驱动一览

Unix Drivers | NVIDIAUnix Drivershttps://www.nvidia.cn/drivers/unix/

告别手动录入,自动化PDF转Excel工具精选

PDF文件可以跨平台高兼容,这就使得在很多需要保存页面版式的文件我们都用PDF格式进行传输。很多时候Excel文件也被这样转发,可是编辑却成为了问题,这时候要是能有pdf转换成excel的工具就能事半功倍了。 1.福昕PDF转换大师 链接一下>>…

【项目】微服务及时通讯系统:客户端环境搭建

1. 安装Qt6 下载在线安装工具 Qt6 相比 Qt5 在模块重组、图形渲染、性能优化和 C 标准支持方面都有显著改进,但不完全向后兼容,需要对旧代码进行调整。 Qt6项目中,一旦代码规模变大了,使用MinGW编译速度就会慢很多。MSVC&…

JavaWeb基础 -- Cookies与Session的区别

JavaWeb基础 – Cookies与Session的区别 1.内容简介 在Java开发面试过程中这类问题也是经常被面试官问到,因此本章将会讲解Cookies与Session的区别,与此同时也会顺带讲解Token、JWT的区别。 2.C/S会话 2.1 产生原因 HTTP协议是无状态的,即…

Linux权限管理应用实例

目录 权限管理应用实例1 权限管理应用实例2 权限管理应用实例3 权限管理应用实例1 有两个组police和bandit,四个用户jack,jerry,xh,xq。 权限管理应用实例2 创建这两个组还有四个用户,并且给这些用户设置密码。 …

C++ 设计模式——命令模式

C 设计模式——命令模式 C 设计模式——命令模式主要组成部分构建过程命令模式 UML 图UML 图解析 命令模式的优点命令模式的缺点命令模式适用场景总结完整代码 C 设计模式——命令模式 命令(Command)模式是一种行为型模式,它将请求封装为对象,从而使您能…

百度云语音识别demo验证

百度云语音识别调研 百度语音识别API: https://ai.baidu.com/ai-doc/SPEECH/il9mh8cjb 1: 注册登录百度账户. 2:打开控制台选择语音技术. 3: 领取免费额度(个人账户.企业账户不确定是否免费额度一样) 4: 由于开发测试使用,可以选择不需要包名. 5: 下载demo程序: https://g…