Spark的三种部署模式及其特点与区别
Spark支持多种集群部署模式,主要分为以下三类:
部署模式 | 特点 | 适用场景 | 资源管理 | 依赖 |
---|---|---|---|---|
Local模式 | 单机运行,所有进程(Driver、Executor)在同一个JVM中 | 开发调试、小规模数据测试 | 无集群资源管理,仅本地线程模拟 | 无需外部集群,仅需Spark安装包 |
Standalone模式 | Spark自带的轻量级集群管理器,支持分布式资源调度 | 中小规模集群,需独立管理资源 | Standalone Master/Worker节点管理资源 | 依赖Spark自带的集群管理组件 |
集群管理模式 | 集成外部集群管理器(如YARN、Mesos、Kubernetes) | 企业级生产环境,与现有集群系统整合 | 由外部集群管理器(如YARN)分配资源 | 需部署外部集群(如Hadoop YARN、K8s) |
核心区别
-
资源管理方式
-
Local:无资源管理,仅本地线程。
-
Standalone:Spark自带的Master/Worker资源调度。
-
集群模式:依赖外部集群管理器(如YARN的ResourceManager)。
-
-
扩展性
-
Local:仅单机,无法扩展。
-
Standalone:支持多节点,但资源调度能力较弱。
-
集群模式:高扩展性,适合大规模集群(如YARN支持千级节点)。
-
-
生产适用性
-
Local:仅限开发测试。
-
Standalone:适合中小规模生产环境。
-
集群模式:企业级生产首选(如与Hadoop生态集成)。
-
Spark集群模式运行时架构
在集群模式下(以YARN为例),Spark的运行时架构包含以下核心组件:
1. 核心角色
-
Driver
-
运行用户编写的
main()
函数,负责:-
解析代码生成DAG(有向无环图)。
-
将DAG拆分为Task,分发给Executor。
-
监控任务执行状态。
-
-
两种部署模式:
-
Client模式:Driver运行在提交任务的客户端机器上。
-
Cluster模式:Driver运行在集群的某个节点(由YARN管理)。
-
-
-
Executor
-
在Worker节点上启动的JVM进程,负责:
-
执行Driver分配的Task(如Map、Reduce操作)。
-
缓存数据(通过内存或磁盘)。
-
-
每个Executor可并行运行多个Task(由
spark.executor.cores
配置)。
-
-
Cluster Manager
-
外部集群管理器(如YARN ResourceManager、K8s Master):
-
分配集群资源(CPU、内存)。
-
启动Driver和Executor。
-
-
2. 运行时流程(以YARN Cluster模式为例)
-
提交任务
-
用户通过
spark-submit
提交任务到YARN ResourceManager。 -
ResourceManager分配Container启动ApplicationMaster(Driver)。
-
-
资源申请
-
Driver向ResourceManager申请Executor资源。
-
ResourceManager通知NodeManager启动Executor容器。
-
-
任务执行
-
Driver将Task分发到Executor。
-
Executor执行Task,返回结果给Driver。
-
-
结果回收
-
Driver汇总结果,任务完成后释放资源。
-
3. 架构示意图
+-------------------+ +---------------------+
| Client Machine | | YARN Cluster |
| (spark-submit) | | |
+-------------------+ +----------+----------+| || 1. Submit Job | 2. Launch AppMaster (Driver)+-------------------------->+|| 3. Request Resources+-------> ResourceManager|| 4. Start Executors+-------> NodeManagers|
+------------------+ |
| Executor | <-----------------+
| (Task Execution) | 5. Run Tasks
+------------------+
不同集群管理器的对比
集群管理器 | 特点 | 适用场景 |
---|---|---|
YARN | 与Hadoop生态深度集成,资源隔离性好 | 已部署Hadoop的环境 |
Kubernetes | 原生容器化支持,弹性伸缩能力强 | 云原生环境(如AWS EKS、GKE) |
Mesos | 通用资源调度框架,支持混合负载(如同时运行Spark和Docker) | 多框架混合集群 |
总结
-
部署模式选择:
-
开发测试用Local,轻量级集群用Standalone,生产环境优先选YARN/K8s。
-
-
架构核心:
-
Driver负责任务调度,Executor执行计算,Cluster Manager管理资源。
-
-
性能优化点:
-
Executor配置:调整CPU核数、内存大小(避免OOM)。
-
数据本地性:利用Spark的
locality
策略减少网络传输。
-