spark源码阅读之spark-class脚本
spark-class脚本
-
判断SPARK_HOME是否存在
如果不存在SPARK_HOME,请阅读前一篇文章
-
执行load-spark-env脚本
- 判断SPARK_ENV_LOADED是否存在,如果不存在执行2、3、4,如果存在到5.
- 设置SPARK_ENV_LOADED=1。
- 设置SPARK_CONF_DIR为SPARK_HOME下的conf目录。
- 查找SPARK_CONF_DIR下是否存在spark_env.sh,如果存在,执行脚本。
- 判断SPARK_SCALA_VERSION是否设置,如果没有设置执行6、7、8、9 。
- 设置ASSEMBLY_DIR2为${SPARK_HOME}/assembly/target/scala-2.11
- 设置ASSEMBLY_DIR1为${SPARK_HOME}/assembly/target/scala-2.12
- 如果两个文件夹都存在,则输出存在多个scala版本,失败退出。
- 通过文件夹存在判断scala的version。
-
验证JAVA_HOME
- 判断JAVA_HOME是否存在,如果不存在执行2,存在则设置RUNNER为${JAVA_HOME}/bin/java。
- 执行java命令,如果成功则,设置RUNNER为java;如果失败,则退出脚本报错,JAVA_HOME is not set 。
-
设置SPARK_JARS_DIR
查看${SPARK_HOME}/jars是否存在,如果不存在,查看
${SPARK_HOME}/assembly/target/scala-$SPARK_SCALA_VERSION/jars
。如果$SPARK_JARS_DIR
不存在,抛出Failed to find Spark jars directory,退出脚本。否则设置LAUNCH_CLASSPATH为SPARK_JARS_DIR所有文件。 -
是否加入launcher
如果设置SPARK_PREPEND_CLASSES环境变量,则加入
${SPARK_HOME}/launcher/target/scala-$SPARK_SCALA_VERSION/classes
-
构建执行命令
解析spark-submit提交命令,执行
java -Xmx128m -cp $LAUNCH_CLASSPATH org.apache.spark.launcher.Main $@(实际脚本提交参数)
.org.apache.spark.launcher.Main
在launcher模块,详细流程如下图:图中buildSparkSubmitCommand逻辑如下:
- 读取提交命令重的--properties-file,如果不存在则读取conf/spark-default.conf
- isClientMode:判断是否为client模式,--master属性优先级高于conf/spark-default.conf中spark.master配置,--deploy-mode优先级高于conf/spark-default.conf中spark.submit.deployMode的优先级。判断master为空(默认是local模式)或者deploy-mode为client或者master为yarn-cluster并且deploy-mode为空。
- 如果isClientMode为true,extraClassPath=conf/spark-default.conf中spark.driver.extraClassPath配置,如果不为true,则为null
- buildJavaCommand,获取javaHome,拼成cmd的第一个元素/javaHome/bin/java,如果存在conf/java-opts配置,读取配置,加入到cmd集合(这里网上介绍的很少,不知道为什么,导致不知道这个文件具体应该怎么写,看来只有debug了),加入
-cp
. - buildClassPath,首先加入extraClassPath,其次加入conf文件夹。下面有关于测试的内容省略,加载SPARK_HOME下的jars目录,加载HADOOP_CONF_DIR、YARN_CONF_DIR、SPARK_DIST_CLASSPATH环境变量。
- 判断是否是Thrift Server,判断方法很简单,比较主函数是否为
org.apache.spark.sql.hive.thriftserver.HiveThriftServer2
。如果是的话,加入SPARK_DAEMON_JAVA_OPTS环境变量 - 加入SPARK_SUBMIT_OPTS环境变量,大概搜了下,都在spark-hell内。
- 获取driverExtraJavaOptions,获取配置中spark.driver.extraJavaOptions,配置中不允许出现Xmx,采用
--driver-memory
或者spark.driver.memory
替代。 - 如果isClientMode为true,Xmx的顺序为
SPARK_DAEMON_MEMORY
(是否是thrift server)>spark.driver.memory
>SPARK_DRIVER_MEMORY
>SPARK_MEM
>1g(默认内存)。 - 添加
org.apache.spark.deploy.SparkSubmit
到cmd中,添加实际提交命令到cmd中。
-
执行命令
构建好的命令大概如下:
${JAVA_HOME}/bin/java -cp ${CLASS_PATH} org.apache.spark.deploy.SparkSubmit --master ......
等,开始exec执行。
0条评论