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类