前言
在第四篇文章 SparkContext 初始化与 TaskScheduler 创建流程(四) 中,我们分析了 SparkContext 初始化和 TaskScheduler 创建流程。本文详细介绍 Yarn Client 模式的提交流程。
版本
Spark 3.2.3
Yarn Client 模式概述
Yarn Client 模式下,Driver 运行在提交应用的客户端机器上,直接与 YARN ResourceManager 通信申请资源,Executor 运行在 YARN 的 NodeManager 节点上。
什么是 Driver?Driver 为什么运行在客户端?
在 Spark 中,Driver 并不对应某个单独的类或对象,而是一个运行时角色——用户主类的 main 方法在哪里执行,Driver 就在哪里(用户主类中会创建 SparkContext/SparkSession,驱动整个应用的执行)。
第二篇文章 SparkSubmit 提交流程分析(二) 中,prepareSubmitEnvironment 方法根据 deployMode 设置 childMainClass,决定了 main 方法在何处执行:
| 模式 | childMainClass | main 方法执行位置 | Driver 位置 |
|---|---|---|---|
| Yarn Client | args.mainClass(用户主类) |
runMain 在客户端反射调用 |
客户端 |
| Yarn Cluster | YarnClusterApplication |
runDriver 在 AM 内调用 |
集群 |
总结:Yarn Client 模式
childMainClass = args.mainClass,本地反射执行用户主类的 main 方法,Driver 在客户端;Yarn Cluster 模式childMainClass = YarnClusterApplication,由 ApplicationMaster 通过runDriver()启动用户主类,Driver 在集群中。
关于 Driver 及各模式下角色的详细总结,将在系列文章完成后单独分析。
1 | // 提交命令示例 |