Spark的三种部署模式及其特点与区别

发布于:2025-05-11 ⋅ 阅读:(40) ⋅ 点赞:(0)

Spark支持多种集群部署模式,主要分为以下三类:

部署模式 特点 适用场景 资源管理 依赖
Local模式 单机运行,所有进程(Driver、Executor)在同一个JVM中 开发调试、小规模数据测试 无集群资源管理,仅本地线程模拟 无需外部集群,仅需Spark安装包
Standalone模式 Spark自带的轻量级集群管理器,支持分布式资源调度 中小规模集群,需独立管理资源 Standalone Master/Worker节点管理资源 依赖Spark自带的集群管理组件
集群管理模式 集成外部集群管理器(如YARN、Mesos、Kubernetes) 企业级生产环境,与现有集群系统整合 由外部集群管理器(如YARN)分配资源 需部署外部集群(如Hadoop YARN、K8s)
核心区别
  1. 资源管理方式

    • Local:无资源管理,仅本地线程。

    • Standalone:Spark自带的Master/Worker资源调度。

    • 集群模式:依赖外部集群管理器(如YARN的ResourceManager)。

  2. 扩展性

    • Local:仅单机,无法扩展。

    • Standalone:支持多节点,但资源调度能力较弱。

    • 集群模式:高扩展性,适合大规模集群(如YARN支持千级节点)。

  3. 生产适用性

    • 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模式为例)
  1. 提交任务

    • 用户通过spark-submit提交任务到YARN ResourceManager。

    • ResourceManager分配Container启动ApplicationMaster(Driver)。

  2. 资源申请

    • Driver向ResourceManager申请Executor资源。

    • ResourceManager通知NodeManager启动Executor容器。

  3. 任务执行

    • Driver将Task分发到Executor。

    • Executor执行Task,返回结果给Driver。

  4. 结果回收

    • 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策略减少网络传输。


网站公告

今日签到

点亮在社区的每一天
去签到