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

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

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

目前已经更新到了:

Hadoop(已更完)

HDFS(已更完)

MapReduce(已更完)

Hive(已更完)

Flume(已更完)

Sqoop(已更完)

Zookeeper(已更完)

HBase(已更完)

Redis (已更完)

Kafka(已更完)

Spark(正在更新!)

章节内容

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


Spark SQL JOIN

Boardcast JOIN

Shuffle JOIN

SQL解析过程

SparkSQL 常见的优化逻辑

28100518d493aaf6e53321392191979f_556cf3b176274b62898ed54c8de955ac.png 背景概述

随着大数据技术的不断发展,人们对于大数据的实时性处理要求也不断提高,传统的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 函数实现。

2cf073371f321d1491e298b2359367da_6181996ca0ee4e0aa92b36f7f0aac115.png 容错性

检查点机制: 为了处理故障和保证数据一致性,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融合

7d280488f9cddfafb45c4119492973e1_1466fed67682420c949564a7a8a05a01.png Spark Streaming 与 Spark 基于RDD的概念比较类似,Spark Streaming 使用离散化流(Discretized Stream)作为抽象表示,成为 DStream。

DStream是随着时间推移而收到的数据的序列,在内部,每个时间区间收到的数据都作为RDD存在,DStream是由这些RDD所组成的序列。

d9c85c91c7c5d1b01928fedbcb8c6b42_677afa73c4e742b59b7121f87f317340.png 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作业来处理这些数据。

e92ce8aa9ce43c954aedb5b3a5136efb_63d27cd419074045b138e67f5faa7111.png 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 提供了背压机制,可以动态调整数据处理速率,防止系统过载。


相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
12月前
|
人工智能 分布式计算 大数据
大数据≠大样本:基于Spark的特征降维实战(提升10倍训练效率)
本文探讨了大数据场景下降维的核心问题与解决方案,重点分析了“维度灾难”对模型性能的影响及特征冗余的陷阱。通过数学证明与实际案例,揭示高维空间中样本稀疏性问题,并提出基于Spark的分布式降维技术选型与优化策略。文章详细展示了PCA在亿级用户画像中的应用,包括数据准备、核心实现与效果评估,同时深入探讨了协方差矩阵计算与特征值分解的并行优化方法。此外,还介绍了动态维度调整、非线性特征处理及降维与其他AI技术的协同效应,为生产环境提供了最佳实践指南。最终总结出降维的本质与工程实践原则,展望未来发展方向。
636 0
|
8月前
|
分布式计算 Kubernetes 调度
Kubeflow-Spark-Operator-架构学习指南
本指南系统解析 Spark Operator 架构,涵盖 Kubebuilder 开发、控制器设计与云原生集成。通过四阶段学习路径,助你从部署到贡献,掌握 Kubernetes Operator 核心原理与实战技能。
472 0
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
1216 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
734 79
|
机器学习/深度学习 人工智能 自然语言处理
3 秒音频也能克隆?拆解 Spark-TTS 架构的极致小样本学习
本文深入解析了 Spark-TTS 模型的架构与原理,该模型仅需 3 秒语音样本即可实现高质量的零样本语音克隆。其核心创新在于 BiCodec 单流语音编码架构,将语音信号分解为语义 Token 和全局 Token,实现内容与音色解耦。结合大型语言模型(如 Qwen 2.5),Spark-TTS 能直接生成语义 Token 并还原波形,简化推理流程。实验表明,它不仅能克隆音色、语速和语调,还支持跨语言朗读及情感调整。尽管面临相似度提升、样本鲁棒性等挑战,但其技术突破为定制化 AI 声音提供了全新可能。
932 35
|
11月前
|
SQL JSON 分布式计算
Spark SQL架构及高级用法
Spark SQL基于Catalyst优化器与Tungsten引擎,提供高效的数据处理能力。其架构涵盖SQL解析、逻辑计划优化、物理计划生成及分布式执行,支持复杂数据类型、窗口函数与多样化聚合操作,结合自适应查询与代码生成技术,实现高性能大数据分析。
767 2
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
738 2
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
652 1
|
8月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路