從腳本說起
在看源碼之前,我們一般會看相關腳本了解其初始化信息以及Bootstrap類,Spark也不例外,而Spark我們啟動三端使用的腳本如下:
%SPARK_HOME%/sbin/start-master.sh
%SPARK_HOME%/sbin/start-slaves.sh
%SPARK_HOME%/sbin/start-all.sh
%SPARK_HOME%/bin/spark-submit
三端啟動腳本中對于公共處理部分進行抽取為獨立的腳本,如下:
spark-config.sh | 初始化環(huán)境變量 SPARK_CONF_DIR, PYTHONPATH |
bin/load-spark-env.sh | 初始化環(huán)境變量SPARK_SCALA_VERSION, 調用%SPARK_HOME%/conf/spark-env.sh加載用戶自定義環(huán)境變量 |
conf/spark-env.sh | 用戶自定義配置 |
接下來針對于一些重要的腳本進行一一描述
一. start-daemon.sh
主要完成進程相關基本信息初始化,然后調用bin/spark-class進行守護進程啟動,該腳本是創(chuàng)建端點的通用腳本,三端各自腳本都會調用spark-daemon.sh腳本啟動各自進程
初始化 SPRK_HOME,SPARK_CONF_DIR,SPARK_IDENT_STRING,SPARK_LOG_DIR環(huán)境變量(如果不存在)
初始化日志并測試日志文件夾讀寫權限,初始化PID目錄并校驗PID信息
調用/bin/spark-class腳本,/bin/spark-class見下
二. bin/spark-class
master調用舉例:bin/spark-class --class org.apache.spark.deploy.master.Master --host $SPARK_MASTER_HOST --port $SPARK_MASTER_PORT --webui-port $SPARK_MASTER_WEBUI_PORT $ORIGINAL_ARGS
初始化 RUNNER(java),SPARK_JARS_DIR(%SPARK_HOME%/jars),LAUNCH_CLASSPATH信息
調用( "$RUNNER" -Xmx128m -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@")獲取最終執(zhí)行的shell語句