Ⅰ Spark-Submit 源碼剖析
SparkSubmit 源碼剖析:
SparkSubmit 是 Apache Spark 中用於提交作業到集群的關鍵工具。其源碼邏輯嚴謹且復雜,主要經歷了參數校驗、命令構建、執行環境准備及作業啟動等階段。以下是詳細的剖析:
參數校驗:
- 入口:Main 方法首先進行參數校驗,確保用戶輸入的參數符合規范。
- 方式:通過 checkArgument 方法進行參數的有效性檢查。
命令構建:
- 核心類:SparkSubmitCommandBuilder 是構建命令的核心類,它繼承自 AbstractCommandBuilder 抽象類。
- 構建過程:
- 參數解析:使用 OptionParser 解析用戶輸入的參數。
- 命令生成:通過 buildCommand 方法生成具體的提交命令。buildCommand 方法內部調用 buildSparkSubmitCommand 來構建命令列表。
- 命令組成:命令列表包括兩部分,一部分是通用參數,另一部分是具體參數,這些參數通過 OptionParser 獲取並構建。
執行環境准備:
- 入口:SparkSubmit.scala 中的 doSubmit 方法是執行環境的准備入口。
- 參數解析:使用 SparkSubmitArgumentsParser 解析參數,並生成 SparkSubmitArguments 對象。
- 環境初始化:通過 prepareSubmitEnvironment 方法初始化環境變數,返回一個包含子進程參數、classpath 列表、系統屬性 map 和主類名的四元組。
作業啟動:
- 執行入口:runMain 方法是作業執行的入口,它接受 SparkSubmitArguments 作為參數。
- 主類載入:通過類載入器載入主類,並處理可能的異常。
- 應用生成與啟動:根據主類生成 SparkApplication 對象,並調用其 start 方法啟動作業。
總結:SparkSubmit 的源碼邏輯清晰,從參數校驗到命令構建,再到執行環境准備和作業啟動,每一步都經過精心設計。通過對源碼的剖析,我們可以更深入地理解 Spark 作業提交的過程,從而在實際應用中更好地使用和優化 Spark。