Spark 源码学习 - 应用提交-2 Launch Driver
概要
本篇博客是Application 应用提交详细流程中的第二部分,第一部分Submit Driver中介绍了从命令行提交任务开始,至Master注册Driver的流程。接下来Master将注册的Driver信息发送到Worker,在Worker节点启动Driver。
Master发送LaunchDriver消息
Submit Driver 中最后我们讲到将driver注册到waitingDrivers中,接下来调用schedule()方法(如上图),启动Driver和Executor,查看schedule()
如上图,schedule中调用launchDriver(worker, driver)方法,查看launchDriver
如上图,Master通过RPC通信(可以参考我写的关于Spark RPC的博客)将LaunchDriver消息发送给对应的Worker节点。
Worker节点启动Driver
Worker的receive方法接收并处理LaunchDriver信息,如下
如上图,首先将Driver信息封装为DriverRunner,然后调用其start方法启动Driver,查看DriverRunner的start方法(源码较多,state变量部分做了简化处理)
执行步骤如上图注释,最终使用Java中的java.lang.ProcessBuilder类执行Linux命令的方式启动Driver,Linux命令大致如下
到这里,我们在Submit Driver中通过spark-submit上传的/path/to/examples.jar,通过java -cp命令在Worker节点开始运行了,即Launch Driver,所谓的Driver就是/path/to/examples.jar。
最后,将Driver的执行状态返回给Master。
总结
介绍了Master将Driver发送到Worker,及在Worker节点启动Driver的流程,如下
附上原文地址:
Mr_JieLQ https://blog.****.net/u011564172/article/details/65653617