使用spark-shell 啟動spark集群時的流程簡析:
spark-shell->spark-submit->spark-class
在sprk-class中根據條件會從不同的入口啟動application。
從SparkSubmitDriverBootstrapper啟動時 conf/spark-defaults.conf文件必須存在,通過修改SPARK_PRINT_LAUNCH_COMMAND的值可以查看詳細的Spark Command
SparkSubmitDriverBootstrapper 主要是為了避免在腳本中處理復雜的的properties文件 。其中進行了運行環境所需的參數的配置,利用這些參數生成了command,同時開啟進程 process執行命令,對於process的輸入輸出進行了重定向。通過配置SPARK_PRINT_LAUNCH_COMMAND環境變量可以查看生成的command。
SparkSubmitArguments用於解析和封裝從spark-submit腳本獲得參數
其中:
getPropertiesFromFile(file: File)用於屬性的配置文件
parseOpts 解析參數
mergeSparkProperties 根據讀取的properties對未賦值的進行賦值
checkRequiredArguments 確保必要的字段存在
SparkSubmit是啟動一個application的入口 主要有createLaunchEnv和launch兩個方法,在launch中會通過反射調用mianclass(eg. 上如中的org.apache.spark.repl.Main),在SparkSubmit中會根據不同的clusterManger和deployMode選擇不同的MainClass。
在org.apache.spark.repl.Main中的Main方法調用process生成一個新的 new Scala compiler,在這個過程中會調用SprkILoopInit.scala中的initializeSpark方法用於最終生成sc,從而在REPL中使用。