spark 源码导读1 从spark启动脚本开始

当我们启动spark master/slaves时,会执行$SPARK_HOME/sbin/start_all.sh. 下面我们就从这个脚本来看看它都做了些什么?

此脚本首先会检查我们调用它时是否含有--with-tachyon参数,如果包含则设置TACHYON_STR,然后它依次调用下面三个脚本:

1 # Load the Spark configuration
2 . "$sbin/spark-config.sh"
3 
4 # Start Master
5 "$sbin"/start-master.sh $TACHYON_STR
6 
7 # Start Workers
8 "$sbin"/start-slaves.sh $TACHYON_STR
View Code

 接下来我们再看看它调用的三个脚本分别做了些什么?

# Load the Spark configuration
. "$sbin/spark-config.sh"

这个脚本的功能是设置并加载$
SPARK_PREFIX、$SPARK_HOME、 $SPARK_CONF_DIR、$PYTHONPATH 环境变量信息。

 

# Start Master
"$sbin"/start-master.sh $TACHYON_STR

首先调用. "${SPARK_CONF_DIR}/spark-env.sh" 加载用户自定义配置信息,scala版本信息。
如果我们没有配置$SPARK_MASTER_PORT、$SPARK_MASTER_IP、$SPARK_MASTER_WEBUI_PORT,就会使用默认值。
然后调用
"$sbin"/spark-daemon.sh start org.apache.spark.deploy.master.Master 1 --ip $SPARK_MASTER_IP --port $SPARK_MASTER_PORT --webui-port $SPARK_MASTER_WEBUI_PORT

启动Master进程。spark-daemon.sh 中,主要配置
log="$SPARK_LOG_DIR/spark-$SPARK_IDENT_STRING-$command-$instance-$HOSTNAME.out"
pid="$SPARK_PID_DIR/spark-$SPARK_IDENT_STRING-$command-$instance.pid"
然后以spark-class(调用"$SPARK_PREFIX"/bin/spark-class) 方式(这里实际就是调用java 命令)启动java进程。

如果包含--with-tachyon参数,并且存在"$sbin"/../tachyon/bin/tachyon,启动tchyon程序
"$sbin"/../tachyon/bin/tachyon bootstrap-conf $SPARK_MASTER_IP
"$sbin"/../tachyon/bin/tachyon format -s
"$sbin"/../tachyon/bin/tachyon-start.sh master
# Start Workers
"$sbin"/start-slaves.sh $TACHYON_STR

如果包含--with-tachyon参数,会先启动tchyon进程,然后在集群上各Worker节点上启动Worker进程,如下:

if [ "$START_TACHYON" == "true" ]; then
"$sbin/slaves.sh" cd "$SPARK_HOME" \; "$sbin"/../tachyon/bin/tachyon bootstrap-conf "$SPARK_MASTER_IP"

# set -t so we can call sudo
SPARK_SSH_OPTS="-o StrictHostKeyChecking=no -t" "$sbin/slaves.sh" cd "$SPARK_HOME" \; "$sbin/../tachyon/bin/tachyon-start.sh" worker SudoMount \; sleep 1
fi

# Launch the slaves
if [ "$SPARK_WORKER_INSTANCES" = "" ]; then
exec "$sbin/slaves.sh" cd "$SPARK_HOME" \; "$sbin/start-slave.sh" 1 "spark://$SPARK_MASTER_IP:$SPARK_MASTER_PORT"
else
if [ "$SPARK_WORKER_WEBUI_PORT" = "" ]; then
SPARK_WORKER_WEBUI_PORT=8081
fi
for ((i=0; i<$SPARK_WORKER_INSTANCES; i++)); do
"$sbin/slaves.sh" cd "$SPARK_HOME" \; "$sbin/start-slave.sh" $(( $i + 1 )) "spark://$SPARK_MASTER_IP:$SPARK_MASTER_PORT" --webui-port $(( $SPARK_WORKER_WEBUI_PORT + $i ))
done
fi


start-slave.sh中调用
"$sbin"/spark-daemon.sh start org.apache.spark.deploy.worker.Worker "$@"

 

posted on 2015-03-04 18:06  Ai_togic  阅读(772)  评论(0编辑  收藏  举报

导航