Spark on Yarn运行机制

一、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 模式执行流程

如上图,是 spark 任务以 Yarn-client 模式提交任务的流程,主要包括:
  1. 客户端提交 application,在客户端启动一个 Driver 进程。
  2. Driver 进程会向 RM(ResrouceManager) 发送请求,启动 AM(ApplicationMaster)的资源。
  3. RM 收到请求,随机选择一台 NM(NodeManager)启动 AM。这里的 NM 相当于 Standalone 的 Worker 节点。
  4. AM 启动后,会向 RM 请求一批 container 资源,用于启动 Executor。
  5. RM 根据资源申请找到一批 NM 返回给 AM,用于启动 Executor。
  6. AM 会向 NM 发送命令启动 Executor。
  7. Executor 启动后,会反向注册给 Driver,Driver 发送 task 到 Executor,执行情况和结果返回给 Driver 端。
 
Yarn-client 模式适用于任务测试,因为 Driver 端运行在本地, Driver 会与 Yarn 集群中的 Executor 进行大量的通信,会造成客户端机器网卡流程的大量增加。

2.2 Yarn-cluster 提交方式

(1)提交命令
./spark-submit  --master yarn  --deploy-mode cluster  --class jar包

(2)执行流程

Spark Yarn-cluster 模式执行流程

如上图,是 spark 任务以 Yarn-cluster 模式提交任务的流程,主要包括:
  1. 客户端提交 Application 应用程序。
  2. 客户端发送请求到 RM,请求启动 AM。
  3. RM 收到请求后随机在一台 NM 上启动 AM(相当于 Driver 端)。
  4. AM 启动后,发送请求到 RM,请求一批 container 资源用于启动 Executor。
  5. RM 返回一批 NM 节点给 AM,用于启动 Executor。
  6. AM 根据返回的 NM 资源列表,发送请求到 NM 启动 Executor。
  7. Executor 反向注册到 AM 所在节点的 Driver,Driver 发送 task 到 Executor。
 
Yarn-cluster 模式主要用于生产环境中,因为 Driver 运行在 Yarn 集群中某一台 NM 中,每次提交任务的 Driver 所在的机器都是随机的,不会产生某一台提交机器的网卡流量激增的现象。缺点是任务提交后在本地看不到日志,只能通过 Yarn UI 页面查看日志。
 
【参考资料】
原文地址:https://www.cnblogs.com/lemonu/p/13540201.html