本文基于spark2.4.7, 梳理SparkSubmit.scala的提交應用的核心流程,流程如下圖1所示,具體請閱讀源碼。
先從一段腳本說起,下面是一段提交spark應用的jar包的腳本
!/bin/bash
echo '數據分析模塊 啟動------------'
echo "PID of this script: $$"
redisHost=192.168.1.212
redisPort=6379
redisPass=xxx
redisIndex=8
intervalTime=5
brokers=192.168.1.212:9092
spark-submit --class com.my.handler.XXXDataHandler
--master spark://XMaster:7077
--deploy-mode client
--driver-memory 512m
--executor-memory 1024m
--total-executor-cores 1
--executor-cores 1
/home/hadoop/spark/mms/mms-analyze-2.0-SNAPSHOT-jar-with-dependencies.jar
redisPort
redisIndex
brokers
這個腳本調用的就是/bin目錄下的spark-submit腳本
查看spark-submit文件里面有一段核心的代碼,說明SparkSubmit 是腳本提交到入口,對應spark源碼core包下的SparkSubmit .scala文件
exec "@"
于是閱讀SparkSubmit .scala文件,SparkSubmit 主要可以提交4種動作,分別是
SUBMIT 提交應用
KILL 殺死進程
REQUEST_STATUS 請求狀態
PRINT_VERSION 答應版本
核心代碼流程圖如下圖所示