Spark 是面向大规模数据处理的统一分析引擎,围绕 RDD(Resilient Distributed Dataset,弹性分布式数据集)抽象构建,支持内存计算、DAG 调度与容错恢复,内置 Spark SQL、DataFrame/Dataset、Structured Streaming、MLlib、GraphX 等组件,广泛应用于批处理、交互式查询、流处理与机器学习场景。Spark SQL 是其中的重要模块,支持多种数据源与常见 SQL 语法,具备自适应查询执行(AQE)、ANSI SQL 兼容、结构化与非结构化数据处理等特性。
本集群中Spark 以 on YARN 模式运行:Spark 作业由 spark-submit 客户端提交至 YARN ResourceManager,Driver 与 Executor 以 Container 形式运行在 NodeManager 节点上,数据与元数据存储于 HDFS。SQL 类作业通过 Spark SQL 引擎(Catalyst 优化器与 Tungsten 执行引擎)解析执行,支持访问 Hive Metastore 中的表。
Spark 的架构由 Driver、Executor 与集群管理器(Cluster Manager)三部分组成,各核心组件的功能说明如下表所示:
| 组件 | 功能说明 |
|---|---|
| Driver | 运行用户应用的main 函数并创建 SparkContext/SparkSession,负责 DAG 构建、Stage/Task 划分与调度分发,并跟踪作业运行状态 |
| SparkSession | Spark 2.0 起的统一编程入口,封装 SQL、DataFrame、Dataset 等功能的上下文 |
| DAGScheduler | 将RDD 依赖关系构建为 DAG,按 Shuffle 边界划分 Stage,生成 TaskSet |
| TaskScheduler | 将Task 分发到 Executor 执行,处理失败重试与本地性调度 |
| Executor | 运行在工作节点上的JVM 进程,负责执行 Task 并将结果返回 Driver,同时提供 BlockManager 为缓存数据服务 |
| Cluster Manager | 集群资源管理器,负责分配运行作业所需资源。本集群使用YARN,Spark 亦支持 Standalone、Kubernetes 等模式 |
| BlockManager | Executor 内的存储模块,管理 RDD 缓存、Shuffle 中间数据与广播变量 |
以下一些基础概念会对Spark 的理解和应用产生帮助:
1、RDD:弹性分布式数据集,Spark 最基本的数据抽象,不可变、可分区、通过算子(Transformation/Action)进行惰性计算并支持血缘容错;
2、DataFrame/Dataset:基于 RDD 的结构化数据抽象,拥有 Schema 信息,经 Catalyst 优化器生成物理执行计划,性能优于原生 RDD API;
3、Job/Stage/Task:一个 Action 算子触发一个 Job,Job 按 Shuffle 依赖划分为多个 Stage(分为 ShuffleMapStage 与 ResultStage),每个 Stage 按分区数生成多个并行 Task;
4、宽依赖与窄依赖:父 RDD 每个分区最多被一个子分区使用为窄依赖,被多个子分区使用为宽依赖,宽依赖即 Shuffle,是 Stage 划分的边界;
5、Shuffle:Stage 之间重分布数据的全过程,涉及磁盘读写与网络传输,是 Spark 作业最主要的性能瓶颈来源之一;
6、AQE(Adaptive Query Execution):Spark SQL 自适应查询执行框架,运行时根据实际统计信息动态合并 Shuffle 分区、优化 Join 策略与处理数据倾斜。
Spark 安装目录($SPARK_HOME)的主要结构如下表所示:
| 目录/文件 | 说明 |
|---|---|
| bin/ | 客户端命令脚本,包括spark-submit、spark-shell、spark-sql、pyspark 等 |
| sbin/ | 服务管理脚本,包括start-master.sh、start-slaves.sh、start-history-server.sh 等 |
| conf/ | 配置目录,包括spark-defaults.conf、spark-env.sh、log4j2.properties 等 |
| jars/ | Spark 及依赖 jar 包,提交作业时随任务分发 |
| examples/ | 示例程序源码与编译产物(spark-examples jar) |
| python/ | PySpark 库文件 |
| data/ | 示例数据 |