原創文章,轉載請注明: 轉載自http://www.cnblogs.com/tovin/p/3858065.html
為了更深入的了解spark,現開始對spark源碼進行分析,本系列文章以spark 1.0.0版本源碼作為分析對象。今天主要分析下standalone部署方式的啟動過程
1、Spark Standalone組件
Standalone部署方式是一種典型master-slave模式,在這種模式下主要包含三個組件:Master(Cluster Manager)、Worker(slave)、Driver(client)

在spark的sbin目錄中start-master.sh、start-slave.sh腳本就是用來啟動Master、Worker的
2、Master啟動分析
先看看start-master.sh腳本,里面有默認的IP、PORT值。主要調用了org.apache.spark.deploy.master.Master類
在Master類中利用了Akka框架來創建Actor對象
利用actorOf初始化Master對象后,就是回調Master中的preStart方法(Akka的Actor對象一旦被初始化就會回調preStart方法)
preStart方法中啟動了Spark WebUI服務、MetricsSystem(流式計算相關的)服務等
3、Worker啟動分析
在start-slave.sh腳本中調用了org.apache.spark.deploy.worker.Worker類來啟動Worker進程
在Worker類中同樣采用AkkaUtils來創建一個Actor
下面看看Worker的preStart方法,它的調用鏈preStart->registerWithMaster->tryRegisterAllMasters,最終調用了tryRegisterAllMasters來注冊到Master。
actorSelection()函數連接Master,並調用了Master的RegisterWorker服務
4、driver啟動分析
以spark-shell啟動為例進行分析,在spark-shell中又調用了spark-submit,而在spark-submit中調用了spark-class
執行org.apache.spark.deploy.SparkSubmit,-class參數 org.apache.spark.repl.Main
下圖分析SparkSubmit類后續的執行過程,通過一步一步跟蹤,它最終會調用到ClientActor類。
在ClientActor類的preStart方法中就會發起注冊Master,並調用了Master的RegisterApplication服務
5、Master-Worker-Driver交互分析
當Worker、Driver啟動后都會向Master發送消息進行登記注冊,下圖為在啟動過程中Master、Driver、Worker之間的信息交互
1、Master、Worker啟動后,Worker會向Master發ResisterWorker消息進行注冊登記,Master負責記錄Worker相關信息后回復RegisteredWorker消息
2、Driver啟動會向Master發送RegisterApplication消息,登記Spark應用相關信息,Master記錄Application注冊信息后回復RegisteredApplication消息
3、Master發送LauchDriver消息通知Worker,Driver已經啟動。Worker收到消息后會記錄Driver相關信息並回復DriverStateChanged消息
4、Master發送LauchExecutor消息通知Worker為Application分配Executor計算資源。分配成功后Worker會發送RegisterExecutor消息告訴Driver,為Application
分配的資源信息
5、ExecutorAdd、ExecutorUpdated、ExecutorStateChanged消息是Master、Worker、Driver之間同步Executor最新信息。
具體代碼實現中,當調用Master的服務后,Master的receive函數就負責分發與處理不同服務。
receive里面很多case語句,就是針對不同的服務進行響應處理的
RegisterWorker服務中創建了WorkInfo來管理Worker的連接信息
RegisterApplication服務中創建了ApplicationInfo來管理Appcation的連接信息
至此,分析完了Driver、Master、Worker啟動建立連接的過程,里面很多細節沒有詳細分析,大家可以自行閱讀相關代碼。
原創文章,轉載請注明: 轉載自http://www.cnblogs.com/tovin/p/3858065.html
