spark任务的提交流程
SparkContext介绍
spark任务的提交流程
- 用户创建一个 Spark Context;
- Spark Context 去找 Cluster Manager 申请资源同时说明需要多少 CPU 和内存等资源;
- Cluster Manager 根据用户提交时设置的参数(CPU、内存),去找 WorkerNode 并启动 Executor,并介绍 Executor 给Driver;
- Driver 会将用户程序划分为不同的 stage,每个 stage 会有一组完全相同的 task 来构成。这些 task 会作用于一些待处理的数据和不同的分区,在阶段划分和 task 创建完成后,Driver 会向 Executor 发送 task;
- Executor 在接收到 task 后会下载 task 运行时的依赖,准备好 task 的运行环境,然后开始执行 task 并实时将 task 的运行环境传输给 Driver;
- 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后:
- 下载任务依赖的代码和数据
- 创建线程池并行执行Task
- 实时向Driver汇报执行进度和状态
- 任务失败时自动重试,超过最大重试次数则作业失败
4. 资源释放与结果处理
- 所有Task执行完成后:
- Driver生成最终结果(如写入存储系统)
- SC向集群管理器释放资源
- 在YARN模式中,AM会主动注销应用