上一节学习了spark源码的编译方法,这一节我们跟踪一下spark-shell的启动.
spark-shell是spark提供一个控制台,通过它我们可以方便的学习spark的API,类似于scala的REPL.
spark-shell在/bin目录下,下面简单分析一下spark-shell的启动。
spark-shell--------->spark-submit------------->spark-class
这是spark-shell启动时依次调用的三个shell脚本文件,最终在spark-class脚本里加载主类并执行。
1.spark-shell脚本主要做的工作是收集spark-submit相关参数,最后调用spark-submit
/bin/spark-submit --class org.apache.spark.repl.Main "${SUBMISSION_OPTS[@]}" spark-shell "${APPLICATION_OPTS[@]}
这是最终执行的命令,可以看到主要是收集submit参数和application参数到SUBMISSION_OPTS和APPLICATION_OPTS里,并传递给spark-submit.
2.spark-submit根据上一个脚本收集到的参数设置一些必要的环境变量,最后调用spark-class
exec "$SPARK_HOME"/bin/spark-class org.apache.spark.deploy.SparkSubmit "${ORIG_ARGS[@]}"
可以看到在spark-shell传递的参数基础上,加上了主类org.apache.spark.deploy.SparkSubmit.这是真正的入口类。