注冊Master有兩種,1種是registerWithMaster方法,1種是tryRegisterAllMasters方法,前者是單Master的情況,后者是多Master,1般情況下是滿足HA機制,我們看1下registerWithMaster方法:
此時會調用tryRegisterAllMasters方法:
此時通過Akka通過消息機制發送消息給Master來注冊程序,RegisterApplication是1個case class,來封裝消息:
我們進入Master的源代碼:
看1下接受客戶端發送過來消息RegisterApplication的代碼以下所示:
此時首先使用ApplicationInfo構建1些準備信息,然后會致使registerApplication代碼的調用:
1、createAppliction:
2、registerApplication:
代碼中就是1個注冊利用的進程。
3、sender ! RegisteredApplication(app.id, masterUrl)方法是回復給發送者消息:
3.1、上面代碼中的changeMaster(masterUrl):
3.2、進入listener.connected(appId)方法:
3.2.1、進入實現類SparkDeploySchedulerBackend的connected方法:
進入notifyContext()方法:
4、接著在Master的消息響應中會調用schedule方法:
可以看到schedule方法中首先要啟動Driver程序,也就是有main函數的程序,然后在schedule中會調度Worker的進程:
上面代碼分析
1、進入launchDriver(worker, driver)方法:
1.1、進入worker.actor ! LaunchDriver(driver.id, driver.desc)方法:
1.1.1、進入 driver.start()方法:
2、進入 launchExecutor(worker, exec)方法:
PS:代碼分析的好亂呀,我這個笨豬
下一篇 [置頂] 徹底理解I/O架構