1. 程式人生 > >Spark Client啟動原理探索

Spark Client啟動原理探索

backend dsc .com png down end 程序 ren and

經過幾天閑暇時間的學習,終於又理解的深入了一些,關於Spark Client如何提交作業也更清晰了點。

在整體的流程圖上是這樣的:
技術分享圖片
大體的思路就是應用程序通過SparkSubmit提交程序後,自動在當前的JVM中啟動Driver,然後與Master通信創建Excutor執行相應的任務。

自己整理了下流程圖
技術分享圖片

以及的組件圖:
技術分享圖片

可以看到大概是下面的步驟:

  1. 新建SparkContext
  2. 創建對應的scheduler和schedulerBackend

     val (sched, ts) = SparkContext.createTaskScheduler(this, master, deployMode)
    _schedulerBackend = sched
    _taskScheduler = ts
    ...
    _taskScheduler.start()
  3. 啟動scheduler的start方法,內部調用backend的start方法
  4. backend調用父類CoarseGrainedSchedulerBackend的start方法

    override def start() {
      super.start()
      ...
      client = new StandaloneAppClient(sc.env.rpcEnv, masters, appDesc, this, conf)
      client.start()
    }
  5. 創建對應的drvierEndpoint
  6. 在backend的start()方法裏面創建StandaloneAppClient
  7. 執行StanaloneAppClient對象的start方法,內部創建ClientEndpoint

DriverEndpoint和ClientEndpoint都會跟Master進行通信,接下來的處理就是編譯驅動程序的代碼,發送給excutor進行相應的處理。

Spark Client啟動原理探索