spark源码解析:2.1 start-master.sh脚本分析

在该系列博客中,源码分析的大致流程是从脚本开始分析,然后再分析代码的执行流程

  • 分析脚本是首先分析脚本的内容,然后再debug执行脚本,结合脚本原内容进行学习

1. start-master.sh脚本内容

start-master.sh 脚本的功能是启动master节点

# 判断是否配置了SPARK_HOME,如果没有设置则先通过$0获取当前脚本的文件名
# 再通过dirname获取sbin目录,再cd回上级目录,pwd获取绝对路径,以此设置SPARK_HOME
if [ -z "${SPARK_HOME}" ]; then
  export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)"
fi

# NOTE: This exact class name is matched downstream by SparkSubmit.
# Any changes need to be reflected there.

# 定义CLASS变量
CLASS="org.apache.spark.deploy.master.Master"

# 判断是否以--help或者-h结尾,如果是的话则打印出脚本使用方法
if [[ "$@" = *--help ]] || [[ "$@" = *-h ]]; then
  echo "Usage: ./sbin/start-master.sh [options]"
  pattern="Usage:"
  pattern+="\|Using Spark's default log4j profile:"
  pattern+="\|Registered signal handlers for"

  "${SPARK_HOME}"/bin/spark-class $CLASS --help 2>&1 | grep -v "$pattern" 1>&2
  exit 1
fi

# 通过$@取出所有参数,并将值赋值给ORIGINAL_ARGS
ORIGINAL_ARGS="$@"

# 通过.加上文件名临时执行spark-config.sh脚本
## 设置SPARK_HOME、SPARK_CONF_DIR以及python的一些环境变量
. "${SPARK_HOME}/sbin/spark-config.sh"

# 通过.加上文件名临时执行load-spark-env.sh脚本
## 设置SPARK_HOME、SPARK_SCALA_VERSION环境变量
. "${SPARK_HOME}/bin/load-spark-env.sh"

# 设置master的通信端口
if [ "$SPARK_MASTER_PORT" = "" ]; then
  SPARK_MASTER_PORT=7077
fi

# 设置master的主机地址
if [ "$SPARK_MASTER_HOST" = "" ]; then
  # 不同的操作系统使用不同的命令进行查看
  case `uname` in
      (SunOS)
	  SPARK_MASTER_HOST="`/usr/sbin/check-hostname | awk '{print $NF}'`"
	  ;;
      (*)
	  SPARK_MASTER_HOST="`hostname -f`"
	  ;;
  esac
fi

# 设置master ui端口
if [ "$SPARK_MASTER_WEBUI_PORT" = "" ]; then
  SPARK_MASTER_WEBUI_PORT=8080
fi

# 调用spark-daemon.sh脚本,传入master启动所需参数
"${SPARK_HOME}/sbin"/spark-daemon.sh start $CLASS 1 \
  --host $SPARK_MASTER_HOST --port $SPARK_MASTER_PORT --webui-port $SPARK_MASTER_WEBUI_PORT \
  $ORIGINAL_ARGS

2. 调试start-master.sh

sh -x start-master.sh

# 判断是否配置了SPARK_HOME,如果没有设置则先通过$0获取当前脚本的文件名
# 再通过dirname获取sbin目录,再cd回上级目录,pwd获取绝对路径,以此设置SPARK_HOME
+ '[' -z /usr/local/spark ']'

# 定义CLASS变量
+ CLASS=org.apache.spark.deploy.master.Master

# 判断是否以--help或者-h结尾,如果是的话则打印出脚本使用方法
+ [[ '' = *--help ]]
+ [[ '' = *-h ]]

# 通过$@取出所有参数,并将值赋值给ORIGINAL_ARGS
+ ORIGINAL_ARGS=

# 通过.加上文件名临时执行spark-config.sh脚本
## 设置SPARK_HOME、SPARK_CONF_DIR以及python的一些环境变量
+ . /usr/local/spark/sbin/spark-config.sh
++ '[' -z /usr/local/spark ']'
++ export SPARK_CONF_DIR=/usr/local/spark/conf
++ SPARK_CONF_DIR=/usr/local/spark/conf
++ '[' -z '' ']'
++ export PYTHONPATH=/usr/local/spark/python:
++ PYTHONPATH=/usr/local/spark/python:
++ export PYTHONPATH=/usr/local/spark/python/lib/py4j-0.10.7-src.zip:/usr/local/spark/python:
++ PYTHONPATH=/usr/local/spark/python/lib/py4j-0.10.7-src.zip:/usr/local/spark/python:
++ export PYSPARK_PYTHONPATH_SET=1
++ PYSPARK_PYTHONPATH_SET=1

# 通过.加上文件名临时执行load-spark-env.sh脚本
## 设置SPARK_HOME、SPARK_SCALA_VERSION环境变量
+ . /usr/local/spark/bin/load-spark-env.sh
++ '[' -z /usr/local/spark ']'
++ '[' -z '' ']'
++ export SPARK_ENV_LOADED=1
++ SPARK_ENV_LOADED=1
++ export SPARK_CONF_DIR=/usr/local/spark/conf
++ SPARK_CONF_DIR=/usr/local/spark/conf
++ '[' -f /usr/local/spark/conf/spark-env.sh ']'
++ set -a
++ . /usr/local/spark/conf/spark-env.sh
+++ JAVA_HOME=/usr/local/jdk
+++ HADOOP_CONF_DIR=/usr/local/spark/hadoop/etc/hadoop
+++ SPARK_LOCAL_IP=s101
++ set +a
++ '[' -z '' ']'
++ ASSEMBLY_DIR2=/usr/local/spark/assembly/target/scala-2.11
++ ASSEMBLY_DIR1=/usr/local/spark/assembly/target/scala-2.12
++ [[ -d /usr/local/spark/assembly/target/scala-2.11 ]]
++ '[' -d /usr/local/spark/assembly/target/scala-2.11 ']'
++ export SPARK_SCALA_VERSION=2.12
++ SPARK_SCALA_VERSION=2.12


# 设置master的通信端口
+ '[' '' = '' ']'
+ SPARK_MASTER_PORT=7077

# 设置master的主机地址  
+ '[' '' = '' ']'
+ case `uname` in
# 不同的操作系统使用不同的命令进行查看
++ uname
++ hostname -f
+ SPARK_MASTER_HOST=s101

# 设置master ui端口
+ '[' '' = '' ']'
+ SPARK_MASTER_WEBUI_PORT=8080

# 调用spark-daemon.sh脚本,传入master启动所需参数:start org.apache.spark.deploy.master.Master 1 --host s101 --port 7077 --webui-port 8080

+ /usr/local/spark/sbin/spark-daemon.sh start org.apache.spark.deploy.master.Master 1 --host s101 --port 7077 --webui-port 8080
starting org.apache.spark.deploy.master.Master, logging to /usr/local/spark/logs/spark-hadoop-org.apache.spark.deploy.master.Master-1-s101.out

下一篇分析在spark-daemon.sh中的执行逻辑

你可能感兴趣的:(spark)