Spark 任務調度之Launch Driver

概要

本篇博客是Spark 任務調度概述詳細流程中的第二部分,第一部分Spark 任務調度之Submit Driver中介紹了從命令行提交任務開始,至Master註冊Driver的流程。接下來Master將註冊的Driver信息發送到Worker,在Worker節點啓動Driver。

Master發送LaunchDriver消息


Spark 任務調度之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命令大致如下

到這裏,我們在Spark 任務調度之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的流程,如下
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章