spark内核揭秘-12-AppClient注册Masters

注册Master有两种,一种是registerWithMaster方法,一种是tryRegisterAllMasters方法,前者是单Master的情况,后者是多Master,一般情况下是满足HA机制,我们看一下registerWithMaster方法:

spark内核揭秘-12-AppClient注册Masters_第1张图片

此时会调用tryRegisterAllMasters方法:

spark内核揭秘-12-AppClient注册Masters_第2张图片

此时通过Akka通过消息机制发送消息给Master来注册程序,RegisterApplication是一个case class,来封装消息:

spark内核揭秘-12-AppClient注册Masters_第3张图片

我们进入Master的源代码:

spark内核揭秘-12-AppClient注册Masters_第4张图片

spark内核揭秘-12-AppClient注册Masters_第5张图片


看一下接受客户端发送过来消息RegisterApplication的代码如下所示:

spark内核揭秘-12-AppClient注册Masters_第6张图片


此时首先使用ApplicationInfo构建一些准备信息,然后会导致registerApplication代码的调用:

1、createAppliction:

spark内核揭秘-12-AppClient注册Masters_第7张图片

2、registerApplication:

spark内核揭秘-12-AppClient注册Masters_第8张图片

代码中就是一个注册应用的过程。

3、sender ! RegisteredApplication(app.id, masterUrl)方法是回复给发送者消息:

spark内核揭秘-12-AppClient注册Masters_第9张图片

3.1、上面代码中的changeMaster(masterUrl):

spark内核揭秘-12-AppClient注册Masters_第10张图片

3.2、进入listener.connected(appId)方法:

spark内核揭秘-12-AppClient注册Masters_第11张图片

3.2.1、进入实现类SparkDeploySchedulerBackend的connected方法:

spark内核揭秘-12-AppClient注册Masters_第12张图片

进入notifyContext()方法:

spark内核揭秘-12-AppClient注册Masters_第13张图片


4、接着在Master的消息响应中会调用schedule方法:

spark内核揭秘-12-AppClient注册Masters_第14张图片

spark内核揭秘-12-AppClient注册Masters_第15张图片

spark内核揭秘-12-AppClient注册Masters_第16张图片

spark内核揭秘-12-AppClient注册Masters_第17张图片

spark内核揭秘-12-AppClient注册Masters_第18张图片

可以看到schedule方法中首先要启动Driver程序,也就是有main函数的程序,然后在schedule中会调度Worker的过程:

上面代码分析

1、进入launchDriver(worker, driver)方法:

spark内核揭秘-12-AppClient注册Masters_第19张图片

1.1、进入worker.actor ! LaunchDriver(driver.id, driver.desc)方法:

spark内核揭秘-12-AppClient注册Masters_第20张图片

1.1.1、进入 driver.start()方法:

spark内核揭秘-12-AppClient注册Masters_第21张图片

spark内核揭秘-12-AppClient注册Masters_第22张图片

spark内核揭秘-12-AppClient注册Masters_第23张图片

spark内核揭秘-12-AppClient注册Masters_第24张图片


2、进入 launchExecutor(worker, exec)方法:

spark内核揭秘-12-AppClient注册Masters_第25张图片

PS:代码分析的好乱呀,我这个笨猪

你可能感兴趣的:(schedule,master,changeMaster,launchDriver)