3.1 Yarn 模式运行机制
3.1.1 YARN Cluster 模式

执行脚本提交任务,实际是启动一个
SparkSubmit的 JVM 进程;SparkSubmit类中的main方法反射调用Client的main方法;Client创建Yarn客户端,然后向Yarn发送执行指令:bin/java ApplicationMaster;Yarn框架收到指令后会在指定的NM中启动ApplicationMaster;ApplicationMaster启动Driver线程,执行用户的作业;AM向RM注册,申请资源;获取资源后
AM向NM发送指令:bin/java CoarseGrainedExecutorBacken;ExecutorBackend进程会接收消息,启动计算对象Executor并跟Driver通信,注册已经启动的Executor;Driver分配任务并监控任务的执行。
注意:
SparkSubmit、ApplicationMaster和CoarseGrainedExecutorBacken是独立的进程;Client和Driver是独立的线程;Executor是一个对象。
3.1.2 Yarn Client 模式

执行脚本提交任务,实际是启动一个
SparkSubmit的 JVM 进程;SparkSubmit伴生对象中的main方法反射调用用户代码的main方法;启动
Driver线程,执行用户的作业,并创建ScheduleBackend;YarnClientSchedulerBackend向RM发送指令:bin/java ExecutorLauncher;Yarn框架收到指令后会在指定的NM中启动ExecutorLauncher(实际上还是调用ApplicationMaster的main方法);object ExecutorLauncher { def main(args: Array[String]): Unit = { ApplicationMaster.main(args) } }AM向RM注册,申请资源;获取资源后
AM向NM发送指令:bin/java CoarseGrainedExecutorBacken;ExecutorBackend进程会接收消息,启动计算对象Executor并跟Driver通信,注册已经启动的Executor;Driver分配任务并监控任务的执行。
注意:SparkSubmit、ExecutorLauncher和CoarseGrainedExecutorBacken是独立的进程;Client和Driver是独立的线程;Executor是一个对象。