spark-submit 提交源码过程研究

1,前言

网上很多别人写的都是基于spark1的版本,因为spark2的版本差异还是有点的,我打算研究一下Spark2作业的提交过程

2,spark提交方式以及参数

./bin/spark-submit\ 

--class org.apache.spark.examples.SparkPi\

--master spark://207.184.161.138:7077\

--executor-memory 20G\

--total-executor-cores100\

/path/to/examples.jar\

1000

3,main方法比较简单

defmain(args: Array[String]):Unit= {

//获取submit时候的参数,如果没有指定,获取spark-defaults.conf配置文件中的参数,还是没有就null

valappArgs =newSparkSubmitArguments(args)

appArgs.actionmatch{

caseSparkSubmitAction.SUBMIT=>submit(appArgs)

caseSparkSubmitAction.KILL=>kill(appArgs)

caseSparkSubmitAction.REQUEST_STATUS=>requestStatus(appArgs)

}

}

4,进入submit方法

private defsubmit(args: SparkSubmitArguments):Unit= {

/*对环境变量分类,分成4个tuple

*  (1) 应用的参数,

*  (2) 应用的classpath,

*  (3) 系统参数

*  (4) 通过(org.apache.spark.deploy.Client)调用APP的主类

*  */

val(childArgs,childClasspath,sysProps,childMainClass) =prepareSubmitEnvironment(args)

进入doRunMain,反射调用main方法

总结submit就是讲应用提交到master,对参数的封装,已经根据部署模式来选择相应的类来执行application,一般Standalone模式的话是org.apache.spark.deploy.Client类

你可能感兴趣的