Spark任务执行流程
部署模式是根据Drvier和Executor的运行位置的不同划分的。client模式提交任务与Driver进程在同一个节点上,而cluster模式提交任务与Driver进程不在同一个节点。
Client模式
Clinet模式是在spark-submit提交任务的节点上运行Driver进程。
执行流程:
- spark-submit脚本提交任务直接启动Driver进程运行main函数
- 构造SparkConext
- 向Master注册Application
- 由Master通知启动Executor
- Executor再注册到Driver
在 Spark 项目开发阶段,可以使用 client 模式对程序进行测试,此时,可以在本地看到比较全的日志信息。
Cluster模式
Cluster模式是在Worker阶段上运行Driver进程。
执行流程:
- 由spark-submit脚本启动临时进程
- 通知Master在某个Worker上启动Driver进程运行main函数
- 初始化SparkConext
- 向Master注册Application
- 由Master通知启动Executor
- Executor再注册到Driver
Yarn任务运行流程
Yarn的组件主要包括:
- ResourceManager : 资源管理
- Application Master : 任务调度
- NodeManager : 节点管理,负责执行任务
当向YARN提交一个应用程序之后,YARN将分两个阶段运行程序:一是启动ApplicationMaster;二是由ApplicationMaster创建应用程序,然后为他申请资源,监控程序的运行,直至结束。
具体步骤:
-
用户向YARN中提交应用程序。
-
ResourceManager为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster。
-
ApplicationMaster首先向ResourceManager注册,目的是让用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束。
-
ApplicationMaster向ResourceManager 的 scheduler申请和领取资源(通过RPC协议)。
-
ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务(java进程)。
-
NodeManager启动任务。
-
各个任务向ApplicationMaster汇报自己的状态和进度(通过RPC协议),以便让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
-
应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。