spark任务的提交流程

发布于:2025-05-25 ⋅ 阅读:(19) ⋅ 点赞:(0)

SparkContext介绍

spark任务的提交流程

  1. 用户创建一个 Spark Context
  2. Spark Context 去找 Cluster Manager 申请资源同时说明需要多少 CPU 和内存等资源;
  3. Cluster Manager 根据用户提交时设置的参数(CPU、内存),去找 WorkerNode 并启动 Executor,并介绍 Executor 给Driver;
  4. Driver 会将用户程序划分为不同的 stage每个 stage 会有一组完全相同的 task 来构成。这些 task 会作用于一些待处理的数据和不同的分区,在阶段划分和 task 创建完成后Driver 会向 Executor 发送 task
  5. Executor 在接收到 task 后会下载 task 运行时的依赖准备好 task 的运行环境,然后开始执行 task 并实时将 task 的运行环境传输给 Driver;
  6. Driver 根据收到的 task 的运行情况来进行状态更新,不断的调用 task 来交给 Executor 执行,直到 task 全部执行正确。若超过最大重试次数还没有执行成功,就会停止 task。

1. 资源申请与初始化

  • 用户创建SparkContext(SC),SC向集群管理器(如YARN或Standalone Master)申请资源,指定CPU和内存需求
  • 集群管理器根据参数分配资源:
    • Standalone模式:Master直接管理Worker节点,创建Executor并注册到SC
    • YARN模式:RM创建ApplicationMaster(AM),AM通过NodeManager(NM)申请容器资源启动Executor

2. 任务划分与调度

  • Driver(即SC所在进程)将用户程序解析为DAG图,根据宽依赖(ShuffleDependency)划分Stage
    • 宽依赖触发Shuffle操作,形成ShuffleMapStage
    • 窄依赖合并为ResultStage
  • 每个Stage被拆分为多个Task,每个Task对应一个数据分区的处理逻辑

3. 任务执行

  • Executor接收Task后:
    1. 下载任务依赖的代码和数据
    2. 创建线程池并行执行Task
    3. 实时向Driver汇报执行进度和状态
  • 任务失败时自动重试,超过最大重试次数则作业失败

4. 资源释放与结果处理

  • 所有Task执行完成后:
    • Driver生成最终结果(如写入存储系统)
    • SC向集群管理器释放资源
    • 在YARN模式中,AM会主动注销应用

附:关键组件协作示意图


网站公告

今日签到

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