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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据-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的热门话题分析
目录
相关文章
|
4月前
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
433 0
|
6月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
5月前
|
人工智能 分布式计算 大数据
大数据≠大样本:基于Spark的特征降维实战(提升10倍训练效率)
本文探讨了大数据场景下降维的核心问题与解决方案,重点分析了“维度灾难”对模型性能的影响及特征冗余的陷阱。通过数学证明与实际案例,揭示高维空间中样本稀疏性问题,并提出基于Spark的分布式降维技术选型与优化策略。文章详细展示了PCA在亿级用户画像中的应用,包括数据准备、核心实现与效果评估,同时深入探讨了协方差矩阵计算与特征值分解的并行优化方法。此外,还介绍了动态维度调整、非线性特征处理及降维与其他AI技术的协同效应,为生产环境提供了最佳实践指南。最终总结出降维的本质与工程实践原则,展望未来发展方向。
257 0
|
2月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
29天前
|
分布式计算 Kubernetes 调度
Kubeflow-Spark-Operator-架构学习指南
本指南系统解析 Spark Operator 架构,涵盖 Kubebuilder 开发、控制器设计与云原生集成。通过四阶段学习路径,助你从部署到贡献,掌握 Kubernetes Operator 核心原理与实战技能。
94 0
|
4月前
|
SQL JSON 分布式计算
Spark SQL架构及高级用法
Spark SQL基于Catalyst优化器与Tungsten引擎,提供高效的数据处理能力。其架构涵盖SQL解析、逻辑计划优化、物理计划生成及分布式执行,支持复杂数据类型、窗口函数与多样化聚合操作,结合自适应查询与代码生成技术,实现高性能大数据分析。
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
3 秒音频也能克隆?拆解 Spark-TTS 架构的极致小样本学习
本文深入解析了 Spark-TTS 模型的架构与原理,该模型仅需 3 秒语音样本即可实现高质量的零样本语音克隆。其核心创新在于 BiCodec 单流语音编码架构,将语音信号分解为语义 Token 和全局 Token,实现内容与音色解耦。结合大型语言模型(如 Qwen 2.5),Spark-TTS 能直接生成语义 Token 并还原波形,简化推理流程。实验表明,它不仅能克隆音色、语速和语调,还支持跨语言朗读及情感调整。尽管面临相似度提升、样本鲁棒性等挑战,但其技术突破为定制化 AI 声音提供了全新可能。
472 35
|
7月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
消息中间件 分布式计算 Kafka
195 Spark Streaming整合Kafka完成网站点击流实时统计
195 Spark Streaming整合Kafka完成网站点击流实时统计
161 0
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
212 0