- Yarn集群中NodeManger向ResourceManager报送心跳,ResourceManager等待应用向自己提交申请
- 在客户端执行Spark命令,向Yarn集群申请资源(采用cluster模式,Driver进程会启动在集群中某台NodeManager上)
- 客户端向ResourceManager申请启动ApplicationMaster(将申请资源的任务让ApplicationMaster承担,减轻Driver进程的压力)
- 在相对空闲的NodeManager的一个Container中启动ApplicationMaster,并且在ApplicationMaster中启动Driver进程(ApplicationMaster和Driver进程在cluster模式下都在同一台机器上)
- ApplicationMaster向ResourceManager申请资源用于启动Executor
- ResourceManager向ApplicationMaster返回一个可用的NodeManager列表
- ApplicationMaster连接NodeManager,在Container中启动Executor
- Executor启动后反向注册给Driver进程
- Driver进程接收到所有的Executor启动完毕
- Driver进程的SparkContext对象识别Action算子,并通过回溯之前的RDD依赖关系完成DAG的构建
- DAGScheduler根据DAG中各个RDD的宽窄依赖关系将Job分为不同的Stage,每个Stage中有一个TaskSet,他们执行的代码都是相同的
- DAGScheduler将含有一组Task的Stage提交给TaskScheduler,TaskScheduler将task任务对应的计算代码发送给Executor进行处理
- Executor将Task任务对应的代码放到线程池中执行,执行后把结果返回给TaskScheduler
- TaskScheduler将结果继续返回给DAGScheduler,DAGScheduler则将下一个Stage的TaskSet交给TaskScheduler去处理
- 等所有的Stage都被处理完成后,Driver和所有的Executor都销毁,剩下ResourceManager继续等待其他的应用向他申请资源
Yarn模式下Spark应用执行流程
最新推荐文章于 2024-05-22 00:24:23 发布