承接“spark-core_05: $SPARK_HOME/sbin/start-all.sh、start-master.sh腳本分析”,在spark-all.sh腳本中會調用start-slaves.sh來啓Worker節點
#!/usr/bin/envbash
#Starts a slave instance on each machine specified in the conf/slaves file.
# 將每個slave實例通過conf/slave文件進行啓動
if [-z "${SPARK_HOME}" ]; then
export SPARK_HOME="$(cd "`dirname"$0"`"/..; pwd)"
fi
START_TACHYON=false
# 將參數循環一遍,然後查看是否有--with-tachyon
while(( "$#" )); do
case$1 in
--with-tachyon)
if [ ! -e"${SPARK_HOME}/sbin"/../tachyon/bin/tachyon ]; then
echo "Error: --with-tachyonspecified, but tachyon not found."
exit -1
fi
START_TACHYON=true
;;
esac
shift
done
#這個spark-config.sh作用就是將$SPARK_CONF_DIR環境變量的值取出來.即:${SPARK_HOME}/conf
."${SPARK_HOME}/sbin/spark-config.sh"
#該腳本會加載spark-env.sh加載一次。並設置環境變量SPARK_SCALA_VERSION=2.10及SPARK_ENV_LOADED=1
."${SPARK_HOME}/bin/load-spark-env.sh"
#Find the port number for the master
#如果SPARK_MASTER_PORT是空串則master的端口設置爲7077,SPARK_MASTER_IP就是當前腳本的主機ip
#start-all.sh腳本就是在master節點上啓動的, 如果是HA則別的standby節點是直接啓動的start-master.sh
if ["$SPARK_MASTER_PORT" = "" ]; then
SPARK_MASTER_PORT=7077
fi
if ["$SPARK_MASTER_IP" = "" ]; then
SPARK_MASTER_IP="`hostname`"
fi
if ["$START_TACHYON" == "true" ]; then
"${SPARK_HOME}/sbin/slaves.sh" cd"${SPARK_HOME}" \;"${SPARK_HOME}/sbin"/../tachyon/bin/tachyon bootstrap-conf"$SPARK_MASTER_IP"
# set -t so we can call sudo
SPARK_SSH_OPTS="-oStrictHostKeyChecking=no -t" "${SPARK_HOME}/sbin/slaves.sh" cd"${SPARK_HOME}" \;"${SPARK_HOME}/tachyon/bin/tachyon-start.sh" worker SudoMount \;sleep 1
fi
#Launch the slaves
#slaves.sh的參數:cd /data/spark-1.6.0-bin-hadoop2.6 ;/data/spark-1.6.0-bin-hadoop2.6/sbin/start-slave.sh spark://luyl152:7077
"${SPARK_HOME}/sbin/slaves.sh"cd "${SPARK_HOME}" \; "${SPARK_HOME}/sbin/start-slave.sh""spark://$SPARK_MASTER_IP:$SPARK_MASTER_PORT"
#遍歷conf/slaves中主機,其中有設置SPARK_SSH_OPTS,
#ssh每一臺機器執行cd /data/spark-1.6.0-bin-hadoop2.6 ;/data/spark-1.6.0-bin-hadoop2.6/sbin/start-slave.sh spark://luyl152:7077
接下來分析一下ssh如何使用start-slave.sh來啓動各個節點的worker的