使用spark-shell 启动spark集群时的流程简析:
spark-shell->spark-submit->spark-class
在sprk-class中根据条件会从不同的入口启动application。
从SparkSubmitDriverBootstrapper启动时 conf/spark-defaults.conf文件必须存在,通过修改SPARK_PRINT_LAUNCH_COMMAND的值可以查看详细的Spark Command
SparkSubmitDriverBootstrapper 主要是为了避免在脚本中处理复杂的的properties文件 。其中进行了运行环境所需的参数的配置,利用这些参数生成了command,同时开启进程 process执行命令,对于process的输入输出进行了重定向。通过配置SPARK_PRINT_LAUNCH_COMMAND环境变量可以查看生成的command。
SparkSubmitArguments用于解析和封装从spark-submit脚本获得参数
其中:
getPropertiesFromFile(file: File)用于属性的配置文件 parseOpts 解析参数 mergeSparkProperties 根据读取的properties对未赋值的进行赋值 checkRequiredArguments 确保必要的字段存在
SparkSubmit是启动一个application的入口 主要有createLaunchEnv和launch两个方法,在launch中会通过反射调用mianclass(eg. 上如中的org.apache.spark.repl.Main),在SparkSubmit中会根据不同的clusterManger和deployMode选择不同的MainClass。
在org.apache.spark.repl.Main中的Main方法调用process生成一个新的 new Scala compiler,在这个过程中会调用SprkILoopInit.scala中的initializeSpark方法用于最终生成sc,从而在REPL中使用。