一、Spark 相关术语
Driver(通常用 SparkContext 代表 Drive):表示运行 Application的main() 函数,并创建 SparkContext。其中创建 SparkContext 的目的是为了准备 Spark 应用程序的运行环境。在 Spark 中由 SparkContext 负责和 ClusterManager 通信,进行资源的申请、任务的分配和监控等;当 Executor 部分运行完毕后,Driver 负责将 SparkContext 关闭。
Executor:Application 运行在 Worker 节点上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个 Application 都有各自独立的一批 Executor。
Worker:集群中可以运行 Application 代码的节点。在 Standalone 模式中指的是通过 slave 文件配置的 worker 节点,在 Spark on Yarn 模式中指的就是 NodeManager 节点。
Job:包含多个 Task 组成的并行计算,是由 Action 行为触发的。
Task:在 Executor 进程中执行任务的工作单元,多个 Task 组成一个 Stage。
Stage:每个 Job 会被拆分很多组 Task,作为一个 TaskSet,其名称为 Stage。
二、Spark on Yarn 任务执行
Spark 任务提交到 Yarn 集群有两种提交方式,一种是 Yarn-client 模式,一种是 Yarn-cluster 模式,其主要区别在于 Driver 端进行所在的位置不同,下面就来看看两种提交方式的流程。
2.1 Yarn-client 提交方式
(1)提交命令
./spark-submit --master yarn --deploy-mode client --class jar包
(2)执行流程
Spark Yarn-client 模式执行流程
- 客户端提交 application,在客户端启动一个 Driver 进程。
- Driver 进程会向 RM(ResrouceManager) 发送请求,启动 AM(ApplicationMaster)的资源。
- RM 收到请求,随机选择一台 NM(NodeManager)启动 AM。这里的 NM 相当于 Standalone 的 Worker 节点。
- AM 启动后,会向 RM 请求一批 container 资源,用于启动 Executor。
- RM 根据资源申请找到一批 NM 返回给 AM,用于启动 Executor。
- AM 会向 NM 发送命令启动 Executor。
- Executor 启动后,会反向注册给 Driver,Driver 发送 task 到 Executor,执行情况和结果返回给 Driver 端。
2.2 Yarn-cluster 提交方式
./spark-submit --master yarn --deploy-mode cluster --class jar包
(2)执行流程
Spark Yarn-cluster 模式执行流程
- 客户端提交 Application 应用程序。
- 客户端发送请求到 RM,请求启动 AM。
- RM 收到请求后随机在一台 NM 上启动 AM(相当于 Driver 端)。
- AM 启动后,发送请求到 RM,请求一批 container 资源用于启动 Executor。
- RM 返回一批 NM 节点给 AM,用于启动 Executor。
- AM 根据返回的 NM 资源列表,发送请求到 NM 启动 Executor。
- Executor 反向注册到 AM 所在节点的 Driver,Driver 发送 task 到 Executor。