Spark Worker源码追踪和分析

Worker原理

driver

原理

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

源码

1、启动driver,主要是将配置信息封装到driverRunner中,driverRunner是一个一个的线程。
Spark Worker源码追踪和分析

2、调用线程启动函数,准备启动driverRunner。在这里我们发现了prepareAndRunDriver方法。
Spark Worker源码追踪和分析

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

Spark Worker源码追踪和分析

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

Spark Worker源码追踪和分析

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

Spark Worker源码追踪和分析

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

Spark Worker源码追踪和分析

Executor

原理

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

源码

在deploy下的worker中

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

Spark Worker源码追踪和分析

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

Spark Worker源码追踪和分析

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

Spark Worker源码追踪和分析

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

Spark Worker源码追踪和分析

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

Spark Worker源码追踪和分析