Spark on Yarn 中YARN-Cluster和YARN-Client的区别及工作流程

目录

一、介绍yarn的模型图

二、AppMaster和Driver

三、YARN-Cluster和YARN-Client的区别

3.1YARN-client的⼯作流程

3.2YARN-Cluster的工作原理

3.3Cluster和Client区别


一、介绍yarn的模型图

运行流程

1、 用户向 YARN 中提交应用程序,其中包括 MRAppMaster 程序,启动 MRAppMaster 的命令,用户程序等。


2、ResourceManager 为该程序分配第一个 Container,并与对应的 NodeManager 通讯,要求它在这个 Container 中启动应用程序 MRAppMaster。


3、MRAppMaster 首先向 ResourceManager 注册,这样用户可以直接通过 ResourceManager查看应用程序的运行状态,然后将为各个任务申请资源,并监控它的运行状态,直到运行结束,重复 4 到 7 的步骤。


4、MRAppMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源。


5、一旦 MRAppMaster 申请到资源后,便与对应的 NodeManager 通讯,要求它启动任务。


6、NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。


7、各个任务通过某个 RPC 协议向 MRAppMaster 汇报自己的状态和进度,以让 MRAppMaster随时掌握各个任务的运行状态,从而可以在任务败的时候重新启动任务。


8、应用程序运行完成后,MRAppMaster 向 ResourceManager 注销并关闭自己。

二、AppMaster和Driver

         上面了解了appmaster在yarn运行流程中的角色,再区分下AppMaster和Driver,任何一个yarn上运行的任务都必须有一个AppMaster,而任何一个Spark任务都会有一个Driver,Driver就是运行SparkContext(它会构建TaskScheduler和DAGScheduler)的进程,当然在Driver上你也可以做很多非Spark的事情,这些事情只会在Driver上面执行,而由SparkContext上牵引出来的代码则会由DAGScheduler分析,并形成Job和Stage交由TaskScheduler,再由TaskScheduler交由各Executor分布式执行。

       所以Driver和AppMaster是两个完全不同的东西,Driver是控制Spark计算和任务资源的,而AppMaster是控制yarn app运行和任务资源的,只不过在Spark on Yarn上,这两者就出现了交叉,而在standalone模式下,资源则由Driver管理。在Spark on Yarn上,Driver会和AppMaster通信,资源的申请由AppMaster来完成,而任务的调度和执行则由Driver完成,Driver会通过与AppMaster通信来让Executor的执行具体的任务。

三、YARN-ClusterYARN-Client的区别

3.1YARN-client的⼯作流程

执⾏过程:

  • 1. Spark Yarn ClientYARNResourceManager申请启动Application Master。同时在SparkContent初始化中将创建DAGSchedulerTASKScheduler等,由于我们选择的是Yarn-Client模式,程序会选择 YarnClientClusterScheduler和YarnClientSchedulerBackend
  • 2. ResourceManager收到请求后,在集群中选择⼀个NodeManager,为该应⽤程序分配第⼀个 Container,要求它在这个Container中启动应⽤程序的ApplicationMaster,与YARN-Cluster区别的是在该ApplicationMaster不运⾏SparkContext,只与SparkContext进⾏联系进⾏资源的分派
  • 3. Client中的SparkContext初始化完毕后,与ApplicationMaster建⽴通讯,向ResourceManager注册,根据任务信息向ResourceManager申请资源(Container
  • 4. ⼀旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackendCoarseGrainedExecutorBackend启动后会向Client中的SparkContext注册并申请Task
  • 5. client中的SparkContext分配TaskCoarseGrainedExecutorBackend执⾏,CoarseGrainedExecutorBackend运⾏Task并向Driver汇报运⾏的状态和进度,以让Client随时掌握各个任务的运⾏状态,从⽽可以在任务失败时重新启动任务
  • 6. 应⽤程序运⾏完成后,ClientSparkContextResourceManager申请注销并关闭⾃⼰
        客户端的Driver 将应⽤提交给 Yarn 后, Yarn 会先后启动 ApplicationMaster executor ,另外 ApplicationMaster 和executor 都 是装载在 container ⾥运⾏, container 默认的内存是 1G ApplicationMaster 分配的内存是 driver-memory, executor 分配的内存是 executor-memory 。同时,因为 Driver 在客户端,所以程序的运⾏结果可以在客 户端显 示,Driver 以进程名为 SparkSubmit 的形式存在。

 注意:因为是与Client端通信,所以Client不能关闭。

 YARN-Client的执行

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn  --deploy-mode client \
--num-executors 1 \
/Users/ly/apps/spark-2.2.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.2.0.jar 10

3.2YARN-Cluster的工作原理

 执⾏过程

  • 1. Spark Yarn ClientYARN中提交应⽤程序,包括ApplicationMaster程序、启动ApplicationMaster的命令、需要在Executor中运⾏的程序等
  • 2. ResourceManager收到请求后,在集群中选择⼀个NodeManager,为该应⽤程序分配第⼀个Container,要求它在这个Container中启动应⽤程序的ApplicationMaster,其中ApplicationMaster进⾏SparkContext等的初始化
  • 3. ApplicationMasterResourceManager注册,这样⽤户可以直接通过ResourceManage查看应⽤程序的运⾏状态,然后它将采⽤轮询的⽅式通过RPC协议为各个任务申请资源,并监控它们的运⾏状态直到运⾏结束
  • 4. ⼀旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackend,⽽Executor对象的创建及维护是由CoarseGrainedExecutorBackend负责的CoarseGrainedExecutorBackend启动后会向 ApplicationMaster中的SparkContext注册并申请Task。这⼀点和Standalone模式⼀样,只不过 SparkContext在Spark Application中初始化时,使⽤CoarseGrainedSchedulerBackend配合 YarnClusterScheduler进⾏任务的调度,其中YarnClusterScheduler只是对TaskSchedulerImpl的⼀个 简单包装,增加了对Executor的等待逻辑等
  • 5. ApplicationMaster中的SparkContext分配TaskCoarseGrainedExecutorBackend执⾏,CoarseGrainedExecutorBackend运⾏Task并向ApplicationMaster汇报运⾏的状态和进度,以让 ApplicationMaster随时掌握各个任务的运⾏状态,从⽽可以在任务失败时重新启动任务应⽤程序运⾏完成后,ApplicationMasterResourceManager申请注销并关闭⾃⼰
  • 6.应⽤程序运⾏完成后,ApplicationMasterResourceManager申请注销并关闭⾃⼰

YARN-Cluster的执行

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn  --deploy-mode cluster \
--num-executors 1 \
/Users/ly/apps/spark-2.2.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.2.0.jar 10

注:Client提交申请后可关闭3.3Cluster和Client区别

  • YARN-Cluster 模式下, Driver 运⾏在 AM(Application Master) 中,它负责向 YARN 申请资源,并监督作业的运⾏状况。当⽤户提交了作业之后,就可以关掉Client ,作业会继续在 YARN 上运⾏,因⽽ YARN-Cluster 模式不 适合运⾏交互类型的作业
  • YARN-Client 模式下, Application Master 仅仅向 YARN 请求 Executor Client 会和请求的 Container 通信来调度他们⼯作,也就是说Client 不能离开
总结:
1 YarnCluster Driver 是在集群的某⼀台 NM 上,但是 Yarn-Client 就是在 RM 的机器上;
2 )⽽ Driver 会和 Executors 进⾏通信,所以 Yarn_cluster 在提交 App 之后可以关闭 Client ,⽽ Yarn-Client不可以;
3 Yarn-Cluster 适合⽣产环境, Yarn-Client 适合交互和调试。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值