vim打开spark-shell脚本可以看到下面这段脚本
spark-shell代码片段:
可以看到在spark-shell脚本中调用了spark-submit脚本,打开spark-submit脚本发现包含如下脚本:
可以看到在spark-submit脚本中,首先检查是否设置了SPARK_HOME,然后调用了spark-class,增加了参数SparkSubmit。
打开spark-class脚本
首先调用了load-spark-env.sh脚本去加载spark-env.sh,设置scala版本,然后寻找java,并赋值给变量RUNNER。
在spark-class中最重要的是下面这段脚本,首先循环读取ARG参数,加入到CMD中。然后执行了
“ R U N N E R " − c p " RUNNER" -cp " RUNNER"−cp"LAUNCH_CLASSPATH” org.apache.spark.launcher.Main "$@
这个是真正执行的第一个spark的类。
org.apache.spark.launcher.Main类:
public static void main(String[] argsArray) throws Exception {
checkArgument(argsArray.length > 0, "Not enough arguments: missing class name.");
List<String> args = new ArrayList<>(Arrays.asList(argsArray));
String className = args.remove(0);
boolean printLaunchCommand = !isEmpty(System.getenv("SPARK_PRINT_LAUNCH_COMMAND"));
AbstractCommandBuilder builder;
//根据传进来的参数创建命令SparkSubmitCommandBuilder或者SparkClassCommandBuilder
if (