Spark学习之14:Spark on Yarn

在Yarn运行Spark有两种模式:
(1)yarn-cluster;
(2)yarn-client。
这两种模式的区别是:yarn-cluster模式下,Driver运行在集群的NodeManager中;而yarn-client模式下,Driver运行于启动spark-submit的客户端。
本文简要介绍两种模式的执行流程。

1. yarn-client

1.1. 执行流程

Spark学习之14:Spark on Yarn_第1张图片

1.2. 解释

(1)在yarn-client模式下,SparkSubmit类直接启动应用程序的main函数,并初始化SparkContext;
(2)在初始化SparkContext过程中,将创建TaskScheduler及其对应的backend;在yarn-client模式,TaskScheduler的具体类为YarnScheduler,backend的具体类为YarnClientSchedulerBackend;
(3)在TaskScheduler启动函数(start)中,将调用其backend(YarnClientSchedulerBackedn)的start方法;start方法中会创建org.apache.spark.deploy.yarn.Client对象,client对象负责向Yarn提交应用程序(通过YarnClient对象);
(4)每个在Yarn中执行的应用程序都有一个对应ApplicationMaster(它不是一个具体的类,只是一个组件的代号);在yarn-client模式下,它对应的具体类为ExecutorLauncher(它是ApplicationMaster的子类);
(5)当应用程序提交成功后,Yarn将分配一个Container来运行ApplicationMaster,这里是ExecutorLauncher;
可见,在yarn-client模式下,Driver和ApplicationMaster运行在各自独立的进程
(6)ExecutorLauncher启动后,将创建YarnAllocator对象,通过它来分配运行应用程序所需的资源(Container);
(7)在分配好的Container上创建新的进程CoarseGrainedExecutorBackend;
(8)接下的过程和standalone模式一样,将向DriverActor发送Executor注册等操作;
(9)具体到Job提交执行,所有的运行模式都相同。

2. yarn-cluster

2.1. 执行流程

Spark学习之14:Spark on Yarn_第2张图片

2.2. 解释

(1)在yarn-cluster模式下,SparkSubmit没有直接启动应用程序主类,而先调用org.apache.spark.deploy.yarn.Client的main方法;
(2)Client类将先向Yarn提交应用程序,这里的ApplicationMaster的就是Spark提供的ApplicationMaster类;
(3)应用程序提交成功后,将在某一个NodeManager的Container中执行 ApplicationMaster类;
(4)ApplicationMaster类首先将启动应用程序主类,也就是说启动Driver;
可见,在yarn-cluster模式下,Driver和ApplicationMaster运行在同一进程。
(5)在SparkContext的初始化过程中,创建YarnClusterScheduler和YarnClusterSchedulerBackend;和yarn-client模式不同,这里没有应用程序提交过程;
(6) 创建YarnAllocator对象,通过它来分配运行应用程序所需的资源(Container);
(7)在分配好的Container上创建新的进程CoarseGrainedExecutorBackend;
(8)接下的过程和standalone模式一样,将向DriverActor发送Executor注册等操作;
(9)具体到Job提交执行,所有的运行模式都相同。

你可能感兴趣的:(Spark)