spark on yarn的 cluster模式 和 client模式 提交运行流程

本文详细解析了Spark on YARN的cluster模式和client模式的提交运行流程,对比了两种模式的特点,包括资源调度、性能表现及网络流量等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spark on yarn的 cluster模式 和 client模式 提交运行流程

---client 模式:

 

根据上面两个流程图得出:

每一个spark程序打成的jar包就是一个application,jar包提交到集群之后启动进程

spark driver在客户端,向yarn集群(resourceManager)请求资源,driver端同时初始化DAGSchulder,TaskSchulder,SchulderBackend和HeartbeatReceiver,启动SchedulerBackend 以及 HeartbeatReceiver,driver端划分stage、task。

 

yarn集群发送一个nodeManager供spark 程序启动applicationMaster。

 

applicationMaster请求到资源后启动相应个数的nodeManager用于运行spark(executor端)程序,SchedulerBackend 开始向applicationMaster请求资源,SchedulerBackend 不断向TaskSchulder获取合适的task分发到executor端。

 

每个nodeManager 需要定时向resourceManager向HeartbeatReceiver发送心跳信息,同时向SchedulerBackend 通知executor的执行结果,然后schedulerBackend向TaskScheduler发送task执行情况,TaskScheduler把task执行情况发送给TaskManager,TaskManager记录了task的执行情况。

 

-----特点(也是cluster模式和client模式的区别):

因为driver运行在本地机器上,所以Client模式的客户端不能杀掉

因为通常情况下client模式,driver运行在本地和yarn不是在一个机房所以性能不是很好。

client模式会导致本地机器负责资源的调度,所以会引起网卡流量激增

---cluster 模式:

 

 

根据上面两个流程图得出:

每一个spark程序打成的jar包就是一个application。

jar包提交到集群之后启动进程,程序在yarn集群的一个nodeManager上向resourceManager请求资源,同时这个nodeManager也是spark程序的applicationMaster(driver端)。这时已经初始化了DAGSchulder,TaskSchulder,SchulderBackend和HeartbeatReceiver,启动SchedulerBackend 以及 HeartbeatReceiver,driver端划分stage、task。

 

applicationMaster请求到资源后启动相应个数的nodeManager用于运行spark(executor端)程序。

 

SchedulerBackend 开始向applicationMaster请求executor资源,同时和TaskSchulder交互获取合适的task并分发到executor端运行程序。

 

每个nodeManager中的executor需要定时向resourceManager(driver端)的HeartbeatReceiver发送心跳信息,同时向SchedulerBackend 通知executor的执行结果,然后schedulerBackend向TaskScheduler发送task执行情况,TaskScheduler把task执行情况发送给TaskManager,TaskManager记录了task的执行情况。

 

 

 

--------特点(也是cluster模式和client模式的区别):

因为driver不是运行在本地机器上而是运行在yarn的某一个nodeManager上,所以Cluster模式的客户端可以杀掉

因为通常情况下cluster模式driver和yarn集群是在一个机房所以性能很好

cluster模式没有流量激增的问题

 

 

 

spark任务提交运行流程:

Application --> 多个job --> 多个stage --> 多个task

1.Spark的driver端只是用来请求资源获取资源的,executor端是用来执行代码程序,也就是说application是在driver端,而job 、stage 、task都是在executor端。

2.在executor端划分job、划分stage、划分task。

程序遇见action算子划分一次job,每个job遇见shuffle(或者宽依赖)划分一次stage,每个stage中最后一个rdd的分区(分片)数就是task数量。

|--DAGScheduler(有向无环图信息,划分stage) 
|--TaskScheduler(存放TaskSet,与SchedulerBackend结合向executor发送task任务) 
    |--DAGScheduler划分之后得taskSet被TaskScheduler封装成TaskManager,
       最后TaskScheduler是以TaskManager为单位发送给SchedulerBackend
|--heartbeatReceiver(心跳连接) 
|--ShcedulerBackend(和applicationMaster交互请求资源,和executor端交互获取task运行情况,然后讲结果反馈给TaskScheduler)
|--ApplicationMaster(向yarn的ResourceManager请求资源,获取到资源启动executor并将启动的executor信息反馈给SchedulerBackend)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值