Spark面试题

Spark---Driver进程

本地运行时,主代码类进程就是driver进程

集群运行时,client发送请求给Master,Master在随机worker节点上(满足资源)启动driver。

driver挂掉------>Executors挂掉------>application就挂掉了

客户端driver的启动

根据提交命令,启动Driver的分别对应了不同的mainclass.

如果是client模式,那么在本地直接执行我们的主代码类,该进程就是Driver进程。

如果是standalone cluster模式,客户端会向maste发送http请求,master稍后会在worker上启动单独的Driver进程。


Master为Driver调度资源,通知Worker启动Driver

资源调度的实现在schedule(),实现相对于Executor的资源分配要简单的多,因为Driver只有一个进程,只在其中一个worker上启动即可。实现如下:

1、首先对所有worker的shuffle随机排列,然后从第一个worker开始轮询,如果worker上的内存和cores能够满足Driver的需求,那么就在该worker上启动Driver。

2、在该worker上启动Driver,实现在launchDriver()方法,在launchDriver()中,就是向worker发送消息LaunchDriver


Worker开始启动Driver进程

Worker在接收到Master发的LaunchDriver消息后,便会开始启动Driver进程,实现如下:

1、构造DriverRunner,由DriverRunner负责运行Driver命令的启动

2、DriverRunner会新建一个线程,由这个线程去负责启动和监控Driver进程

3、从本地拷贝依赖的任务jar(我们自己的jar包)到Driver的工作目录

4、如果设置了Driver进程的监控,--supervise参数那么在Driver进程以非0退出码结束时(一般都是异常结束),Worker会重新启动Driver进程。

注意:Driver异常退出了之后所有的Executors也跟着被kill掉了,整个application也就宕掉了。重新启动Driver进程会重新启动一个新的application

参考:Spark源码分析------Driver进程启动源码实现分析

相关推荐
斯班奇的好朋友阿法法35 分钟前
rabbitmq服务端消费端实例(direct和fanout模式)
分布式·rabbitmq·ruby
斯班奇的好朋友阿法法35 分钟前
rabbitmq的多交换机(扇出为例)监听实现
分布式·rabbitmq·ruby
自由自在的小Bird38 分钟前
TDengine
大数据·时序数据库·tdengine
没有bug.的程序员41 分钟前
分布式架构未来趋势:从云原生到智能边缘的演进之路
java·分布式·微服务·云原生·架构·分布式系统
武话不港141 分钟前
RabbitMQ异常,handleDelivery方法异常
分布式·消息队列·rabbitmq
^Moon^6 小时前
CycloneDDS:跨主机多进程通信全解析
c++·分布式·dds
长安城没有风10 小时前
从入门到精通【Redis】Redis 典型应⽤ --- 分布式锁
数据库·redis·分布式
言之。10 小时前
大模型嵌入 vs ES:语义搜索与关键字搜索
大数据·elasticsearch·搜索引擎
SirLancelot111 小时前
StarRocks-基本介绍(一)基本概念、特点、适用场景
大数据·数据库·数据仓库·sql·数据分析·database·数据库架构
阑梦清川11 小时前
es的docker部署和docker相关的可可视化面板工具介绍
大数据·elasticsearch·docker