目录
引入 Spark
Spark 概念
定义
相关概念
Spark框架架构
集群层面:集群管理
应用层面:作业执行
Spark的优势
Spark生态系统
Spark典型应用场景
Spark官方文档
引入 Spark
在 Spark 出现之前,大数据处理领域的主流工具是 Hadoop MapReduce,但 MapReduce 存在明显短板:
为了解决上述问题,加州大学伯克利分校 AMP 实验室于 2010 年开发了 Spark,2013 年捐赠给 Apache 基金会并成为顶级项目。Spark 以内存计算为核心,大幅提升了大数据处理效率,同时扩展了编程模型和应用场景,逐渐成为大数据处理生态的引擎。
Spark 概念
定义
Apache Spark 是一款快速、通用、可扩展的大数据分析计算引擎,它支持批量处理、交互式查询、实时流处理、机器学习和图计算等多种场景,它基于内存的分布式计算,减少了磁盘 I/O 开销。
相关概念
(1)RDD(Resilient Distributed Dataset)
- 弹性分布式数据集,是 Spark 最基础的数据抽象,也是早期 Spark 的数据结构;
- 特性:弹性(丢失可通过血缘关系重建)、分布式(数据分片存储在集群节点)、只读(不可修改,只能通过转换操作生成新 RDD);
- 作用:作为分布式计算的载体,屏蔽了底层数据存储和节点通信细节,让开发者专注于业务逻辑。
(2)DataFrame & Dataset
- DataFrame:结构化数据抽象,类似于关系型数据库的表,包含列名、数据类型等元数据,支持 SQL 查询,比 RDD 具有更高的查询优化效率;
- Dataset:结合了 RDD 的强类型特性和 DataFrame 的结构化优化特性,是 Spark 2.0 + 推荐的主流数据抽象,兼顾开发灵活性和执行效率。
(3)作业(Job)、阶段(Stage)、任务(Task)
- Job:由一个或多个行动操作(Action)触发的计算任务集合,对应一次完整的数据处理流程(如执行一次count()操作会生成一个 Job);
- Stage:Job 被 DAG 调度器拆分后的执行阶段,划分依据是宽依赖(Shuffle 操作,数据需要跨节点重分区),一个 Job 可以包含多个 Stage,Stage 之间按顺序执行;
- Task:Stage 的最小执行单元,对应一个数据分片的处理逻辑,多个 Task 可以在集群节点上并行执行。
(4)窄依赖与宽依赖
- 窄依赖:父 RDD 的每个分区只对应子 RDD 的一个分区,无需跨节点数据传输(如map()、filter()操作);
- 宽依赖:父 RDD 的一个分区对应子 RDD 的多个分区,需要进行 Shuffle,涉及跨节点数据传输(如groupByKey()、reduceByKey()操作)。
(5)Shuffle
- 定义:分布式计算中,需要将不同节点上的相同 Key 数据聚合到同一节点进行处理的过程;
- 影响:Shuffle 涉及磁盘 I/O 和网络传输,优化 Shuffle 是 Spark 性能调优的方向。
Spark框架架构
Spark 采用主从架构(Master-Slave 架构),分为集群层面和应用层面两个维度,组件:
集群层面:集群管理
负责资源的分配与管理,支持三种集群管理器:
- Spark Standalone:Spark 自带的集群管理模式,简单易用,适合小规模集群;
- YARN:Hadoop 生态的资源管理器,是生产环境中最主流的 Spark 集群管理模式,支持资源动态分配;
- Kubernetes:容器化集群管理平台,适合云原生环境下的 Spark 部署。
应用层面:作业执行
每个 Spark 应用对应一个独立的执行环境,组件:
(1)Driver Program(驱动程序)
- 作用:作为 Spark 应用的入口,负责编写业务逻辑(如创建 SparkContext、定义 RDD 转换和行动操作)、生成 DAG(有向无环图)、将 Job 拆分为 Stage 并调度 Task 到 Executor;
- 部署:可以部署在客户端(Client 模式)或集群节点(Cluster 模式),生产环境常用 Cluster 模式。
(2)Executor(执行器)
- 作用:运行在集群从节点上的进程,负责执行 Task 并存储中间结果(内存或磁盘);
- 特性:每个应用对应一组独立的 Executor,Executor 进程一旦启动,会一直运行直到应用结束,避免重复创建开销;每个 Executor 包含多个 Task Slot(任务插槽),Slot 是 Spark 的最小资源单位,对应一个 CPU 核心。
(3)SparkContext(SC)
- 作用:Spark 应用的上下文对象,负责与集群管理器通信、申请资源、创建 RDD、调度任务,是连接 Spark 应用与集群的桥梁;
- 注意:在 Spark 2.0 + 中,推出了SparkSession,封装了SparkContext、SQLContext等多个上下文,成为新一代编程入口。
(4)DAG Scheduler(DAG 调度器)
- 作用:将 Driver 生成的 DAG 拆分为多个 Stage(以宽依赖 / Shuffle 为拆分边界),并确定 Stage 的执行顺序,将每个 Stage 封装为 TaskSet 提交给 Task Scheduler。
(5)Task Scheduler(任务调度器)
- 作用:接收 DAG Scheduler 提交的 TaskSet,负责将 Task 分配到 Executor 的 Task Slot 中执行,并处理 Task 失败重试逻辑。
Spark的优势
Spark生态系统
Spark 不仅是一个计算引擎,还构建了完整的生态体系:


