Spark:Yarn-Cluster和Yarn-Client的区别

0 首先注意的概念

ResourceManager:是集群所有应用程序的资源管理器,能够管理集群的计算资源并为每个Application分配,它是一个纯粹的调度器。

NodeManager:是每一台slave机器的代理,执行应用程序,并监控应用程序的资源使用情况。

Application Master:每一个应用程序都会有一个Application Master,它的主要职责是向RM申请资源、在每个NodeManager上启动executors、监控和跟踪应用程序的进程等。

1 Yarn-Cluster

这里写图片描述

执行过程:

(1)客户端提交Application到RM,这个过程做的工作有判断集群资源是否满足需求、读取配置文件、设置环境变量、设置Application名字等等;

(2)RM在某一台NodeManager上启动Application Master,AM所在的机器是YARN分配的,事先是不知道的;

(3)AM初始化SparkContext,开始驱动程序,这个NodeManager便是Driver;

(4)AM向ResourceManager申请资源,并在每台NodeManager上启动相应的executors;

(5)初始化后的SparkContext中的通信模块可以通过AKKA与NodeManager上的容器进行通信。

 

比以前的更多的理解:

(1)Application Master所在的NodeManager是Yarn随机分配的,不是在主节点上,下图是实验室集群上跑得一个Spark程序,tseg0是主节点,tseg1~tseg4是workers,IP10.103.240.29指的是tseg3:

这里写图片描述

(2)在上图还可以看出,executor的容器和AM容器是可以共存的,它们的封装都是容器;

(3)AM是Yarn启动的第一个容器;

(4)AM所在的NodeManager就是平常说的Driver端,因为这个AM启动了SparkContext,之前实验室说的“谁初始化的SparkContext谁就是Driver端”一直理解错了,以为这句话是相对于机器说的,但其实是相对于Cluster和Client的集群模式来说的(不知道其他模式Mesos、standalone是不是也是这样)。

(5)在Application提交到RM上之后,Client就可以关闭了,集群会继续运行提交的程序,在实际使用时,有时候会看到这样一种现象,关闭Client会导致程序终止,其实这个Application还没有提交上去,关闭Client打断了提交的过程,Application当然不会运行。

YARN-Client

这里写图片描述

(1)Client Application会初始化SparkContext,这是Driver端;

(2)提交Application到RM;

(3)应该是在RM所在的机器上启动AM(?不确定);

(4)AM向RM申请资源,并启动NodeManager上的Executors;

(5)Executors与SparkContext初始化后的通信模块保持通信,因为是与Client端通信,所以Client不能关闭。

 

YARN-Cluster和YARN-Client的区别

(1)SparkContext初始化不同,这也导致了Driver所在位置的不同,YarnCluster的Driver是在集群的某一台NM上,但是Yarn-Client就是在client机器上;

(2)而Driver会和Executors进行通信,这也导致了Yarn_cluster在提交App之后可以关闭Client,而Yarn-Client不可以;

(3)最后再来说应用场景,Yarn-Cluster适合生产环境,Yarn-Client适合交互和调试。

由此想到的Spark多用户OnYarnCluster

之前实验室配过Hadoop多用户,最近因为培训Spark,又得在这个基础上再能够运行Spark。做的工作很简单,就是把Spark以及Spark依赖的环境scp过去,然后再改一下相应的配置就可以了。猜想的不同用户运行Spark On Yarn Cluster如下图所示,无非就是多增加了一个用户Client,因为ResourceManager是唯一的,所以不同用户CLient提交的Spark Application在集群上运行都是一样的。

这里写图片描述

Reference

《Spark技术内幕-深入解析Spark内核、架构设计与实现原理》

Spark Yarn-cluster与Yarn-client

Spark:Yarn Cluster 和Yarn Client的区别和联系

参考原文:https://blog.csdn.net/BlockheadLS/article/details/53329323

 

==============================================================================================

 

Spark插拨式资源管理

Spark支持Yarn,Mesos,Standalone三种集群部署模式,它们的共同点:Master服务(Yarn ResourceManager,Mesos master,Spark standalone)来决定哪些应用可以运行以及在哪什么时候运行,Slave服务(Yarn NodeManger)运行在每个节点上,节点上实际运行着Executor进程,此外还监控着它们的运行状态以及资源的消耗

 

Spark On Yarn的优势

1. Spark支持资源动态共享,运行于Yarn的框架都共享一个集中配置好的资源池

2. 可以很方便的利用Yarn的资源调度特性来做分类·,隔离以及优先级控制负载,拥有更灵活的调度策略

3.Yarn可以自由地选择executor数量

4.Yarn是唯一支持Spark安全的集群管理器,使用Yarn,Spark可以运行于Kerberized Hadoop之上,在它们进程之间进行安全认证 

 

Yarn-cluster VS Yarn-client

当在Spark On Yarn模式下,每个Spark Executor作为一个Yarn container在运行,同时支持多个任务在同一个container中运行,极大地节省了任务的启动时间

 

Appliaction Master

为了更好的理解这两种模式的区别先了解下Yarn的Application Master概念,在Yarn中,每个application都有一个Application Master进程,它是Appliaction启动的第一个容器,它负责从ResourceManager中申请资源,分配资源,同时通知NodeManager来为Application启动container,Application Master避免了需要一个活动的client来维持,启动Applicatin的client可以随时退出,而由Yarn管理的进程继续在集群中运行

 

Yarn-cluster

在Yarn-cluster模式下,driver运行在Appliaction Master上,Appliaction Master进程同时负责驱动Application和从Yarn中申请资源,该进程运行在Yarn container内,所以启动Application Master的client可以立即关闭而不必持续到Application的生命周期,下图是yarn-cluster模式

 

 

 

Yarn-cluster模式下作业执行流程:

1. 客户端生成作业信息提交给ResourceManager(RM)

2. RM在某一个NodeManager(由Yarn决定)启动container并将Application Master(AM)分配给该NodeManager(NM)

3. NM接收到RM的分配,启动Application Master并初始化作业,此时这个NM就称为Driver

4. Application向RM申请资源,分配资源同时通知其他NodeManager启动相应的Executor

5. Executor向NM上的Application Master注册汇报并完成相应的任务

 

Yarn-client

在Yarn-client中,Application Master仅仅从Yarn中申请资源给Executor,之后client会跟container通信进行作业的调度,下图是Yarn-client模式

 

 

 

Yarn-client模式下作业执行流程:

1. 客户端生成作业信息提交给ResourceManager(RM)

2. RM在本地NodeManager启动container并将Application Master(AM)分配给该NodeManager(NM)

3. NM接收到RM的分配,启动Application Master并初始化作业,此时这个NM就称为Driver

4. Application向RM申请资源,分配资源同时通知其他NodeManager启动相应的Executor

5. Executor向本地启动的Application Master注册汇报并完成相应的任务

 

下表是Spark Standalone与Spark On Yarn模式下的比较

 

 

 

注意:

spark on yarn 的支持两种模式
1)yarn-cluster:适用于生产环境;
2)yarn-client:适用于交互、调试,希望立即看到app的输出
Yarn-cluster和yarn-client的区别在于appMaster:yarn appMaster,每个yarn app实例有一个appMaster进程,是为app启动的第一个container;负责从ResourceManager请求资源,获取到资源后,告诉NodeManager为其启动container;appMaster消除了active client的需要,app client启动app后可以结束,协调由运行在cluster上被yarn管理的进程继续

Yarn-cluster mode
Spark的dirver 运行在 appMaster中,appMaster进程同时负责driving app,请求资源;
启动spark app的client不需要一直存在于整个spark app运行生命周期

yarn-client mode
某些情况需要与spark交互,要求user input,如spark-shell和pyspark,这样的spark app需要spark-driver运行在初始化spark app的client端进程中
这种情况,appMaster仅仅用于从yarn集群请求executor,app client会和请求的container通信来调度他们工作。

原文参考:

https://blog.csdn.net/high2011/article/details/67637338

https://blog.csdn.net/baidu_35901646/article/details/81612164

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值