Spark Worker源码追踪和分析

Worker原理

driver

原理

每一个Driver都会被封装成DriverRunner。在DriverRunner中,主要做的事情,就是在worker上面创建driver的工作目录,然后拉取jar包到本地将这些信息封装好了后使用buildProcess打包发送给driver进行运行,这里只需要知道driver是被java进程调度即可。

源码

1、启动driver,主要是将配置信息封装到driverRunner中,driverRunner是一个一个的线程。
在这里插入图片描述

2、调用线程启动函数,准备启动driverRunner。在这里我们发现了prepareAndRunDriver方法。
在这里插入图片描述

3、创建driver的工作目录,拉取上传的Jar包,然后将这些信息使用command工厂类创建ProcessBuilder对象,使用这个构造类启动driver

在这里插入图片描述

4、使用command创建了工作目录,然后定义了一个初始化的函数主要给解析command命令和设置输入和错误流文,然后开始调用runCommandWithRety真正执行driver的启动过程

在这里插入图片描述

5、其实就是把刚才的driverRunner以java进程的方式开始调用,这里就是先用封装好的command方法调用java进程的start方法,,然后在waitFor()等待执行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TATOwwK3-1600940111851)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200924171433432.png)]

6、显然我们的driver开始运行了,肯定是要和其他worker同步的,注意这个过程是封装在driver的线程中执行的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ie70aO0q-1600940111853)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200924171548947.png)]

Executor

原理

原理基本上和driver一样,也就是将一个一个的executor封装了ExecutorRunner,然后用Command命令封装为了一个一个的ProcessBuilder,然后调用waitFor方法启动。

源码

在deploy下的worker中

首先创建executor的工作目录, 并赋予读写执行的权限

在这里插入图片描述

创建executorRUnner对象,然后调用start()方法,其实就是调用线程启动的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zGU8KKsn-1600940111856)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200924172244435.png)]

在start方法中,主要是运行fetchAndRunExecutor(),最后是根据executor执行的状态杀死进程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qVifAJZq-1600940111858)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200924172330961.png)]

封装builder对象,也就是拉取了Spark的一些工作目录,日志目录和执行端口等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JTOxqJWx-1600940111860)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200924172531092.png)]

大概的意思就是开启进程,使用waitFor()进行等待,到这里就基本完成了worker的原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w39IKUcc-1600940111862)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200924172636893.png)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北漂的阿狸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值