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

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务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的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
1月前
|
大数据
【赵渝强老师】大数据主从架构的单点故障
大数据体系架构中,核心组件采用主从架构,存在单点故障问题。为提高系统可用性,需实现高可用(HA)架构,通常借助ZooKeeper来实现。ZooKeeper提供配置维护、分布式同步等功能,确保集群稳定运行。下图展示了基于ZooKeeper的HDFS HA架构。
|
2月前
|
SQL 存储 分布式计算
ODPS技术架构深度剖析与实战指南——从零开始掌握阿里巴巴大数据处理平台的核心要义与应用技巧
【10月更文挑战第9天】ODPS是阿里巴巴推出的大数据处理平台,支持海量数据的存储与计算,适用于数据仓库、数据挖掘等场景。其核心组件涵盖数据存储、计算引擎、任务调度、资源管理和用户界面,确保数据处理的稳定、安全与高效。通过创建项目、上传数据、编写SQL或MapReduce程序,用户可轻松完成复杂的数据处理任务。示例展示了如何使用ODPS SQL查询每个用户的最早登录时间。
170 1
zdl
|
1月前
|
消息中间件 运维 大数据
大数据实时计算产品的对比测评:实时计算Flink版 VS 自建Flink集群
本文介绍了实时计算Flink版与自建Flink集群的对比,涵盖部署成本、性能表现、易用性和企业级能力等方面。实时计算Flink版作为全托管服务,显著降低了运维成本,提供了强大的集成能力和弹性扩展,特别适合中小型团队和业务波动大的场景。文中还提出了改进建议,并探讨了与其他产品的联动可能性。总结指出,实时计算Flink版在简化运维、降低成本和提升易用性方面表现出色,是大数据实时计算的优选方案。
zdl
161 56
|
9天前
|
存储 SQL 分布式计算
大数据时代的引擎:大数据架构随记
大数据架构通常分为四层:数据采集层、数据存储层、数据计算层和数据应用层。数据采集层负责从各种源采集、清洗和转换数据,常用技术包括Flume、Sqoop和Logstash+Filebeat。数据存储层管理数据的持久性和组织,常用技术有Hadoop HDFS、HBase和Elasticsearch。数据计算层处理大规模数据集,支持离线和在线计算,如Spark SQL、Flink等。数据应用层将结果可视化或提供给第三方应用,常用工具为Tableau、Zeppelin和Superset。
137 8
|
1月前
|
SQL 数据采集 分布式计算
【赵渝强老师】基于大数据组件的平台架构
本文介绍了大数据平台的总体架构及各层的功能。大数据平台架构分为五层:数据源层、数据采集层、大数据平台层、数据仓库层和应用层。其中,大数据平台层为核心,负责数据的存储和计算,支持离线和实时数据处理。数据仓库层则基于大数据平台构建数据模型,应用层则利用这些模型实现具体的应用场景。文中还提供了Lambda和Kappa架构的视频讲解。
203 3
【赵渝强老师】基于大数据组件的平台架构
|
9天前
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
25 0
|
1月前
|
SQL 存储 大数据
单机顶集群的大数据技术来了
大数据时代,分布式数仓如MPP成为热门技术,但其高昂的成本让人望而却步。对于多数任务,数据量并未达到PB级,单体数据库即可胜任。然而,由于SQL语法的局限性和计算任务的复杂性,分布式解决方案显得更为必要。esProc SPL作为一种开源轻量级计算引擎,通过高效的算法和存储机制,实现了单机性能超越集群的效果,为低成本、高效能的数据处理提供了新选择。
|
2月前
|
数据采集 数据可视化 大数据
大数据体系知识学习(三):数据清洗_箱线图的概念以及代码实现
这篇文章介绍了如何使用Python中的matplotlib和numpy库来创建箱线图,以检测和处理数据集中的异常值。
67 1
大数据体系知识学习(三):数据清洗_箱线图的概念以及代码实现
|
2月前
|
机器学习/深度学习 XML 分布式计算
大数据的概念
【10月更文挑战第16天】
129 4
|
2月前
|
存储 SQL 分布式计算
湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
【10月更文挑战第7天】湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
153 1

热门文章

最新文章