Spark-Core源码学习记录 0.集群的启动脚本及launcher.Main作用

这篇博客是Spark源码学习系列的开篇,主要分析Spark集群启动的相关脚本,包括配置文件、start-all.sh、start-master.sh、start-slaves.sh以及org.apache.spark.launcher.Main主类的作用。通过脚本的执行流程,理解Spark如何启动Master和Worker,并介绍了launcher.Main作为Spark启动的命令行入口,负责submit和class两种模式的判断。
摘要由CSDN通过智能技术生成

Spark-Core源码学习记录

该系列作为Spark源码回顾学习的记录,旨在捋清Spark分发程序运行的机制和流程,对部分关键源码进行追踪,争取做到知其所以然,对枝节部分源码仅进行文字说明,不深入下钻,避免混淆主干内容。
本文为Spark源码系列的开篇,主要内容包括对集群启动相关脚本的流程分析。

Spark配置文件

本文以官方的spark安装方式为基础,CDH及其他版本可自行查阅相关配置文件位置。

$SPARK_HOME/conf/
├── log4j.properties.template
├── slaves
├── spark-defaults.conf
└── spark-env.sh

spark-defaults.confspark-env.sh 中配置了一些默认属性,在slaves中配置了 worker的hostname。

Spark启动脚本

$SPARK_HOME/sbin/							$SPARK_HOME/bin/
├── start-all.sh							├── spark-class
├── spark-config.sh							├── spark-shell
├── start-master.sh							├── spark-submit
├── spark-daemon.sh
├── start-slaves.sh
└── start-slave.sh

首先来看 start-all.sh 内容,仅仅是加载 spark-config.sh 的内容,同时分别调用 start-master.shstart-slaves.sh

#!/usr/bin/env bash
if [ -z "${SPARK_HOME}" ]; then
  export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)"
fi
# Load the Spark configuration
. "${SPARK_HOME}/sbin/spark-config.sh"
# Start Master
"${SPARK_HOME}/sbin"/start-master.sh
# Start Workers
"${SPARK_HOME}/sbin"/start-slaves.sh

先来看 start-master.sh 的内容,可以看到就是调用 spark-daemon.sh,并传入一些参数,关键参数为CLASS

#!/usr/bin/env bash   省略部分源码,仅保留主干内容
# NOTE: This exact class name is matched downstream by SparkSubmit.
# Any changes need to be reflected there.
CLASS="org.apache.spark.deploy.master.Master"
# 默认初始化端口 SPARK_MASTER_PORT=7077 #SPARK_MASTER_WEBUI_PORT=8080
# SPARK_MASTER_HOST="`hostname -f`"
"${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

进入 spark-daemon.sh,可以看到最终将所有参数传递给了"${SPARK_HOME}"/bin/spark-class,daemon脚本内部会区别submit和start及stop等不同操作,作为一个统一的入口。根据注释# Runs a Spark command as a daemon.可以知道作为一个daemon(守护线程)来运行。

#!/usr/bin/env bash   仅保留部分关键逻辑代码
# Runs a Spark command as a daemon.
option=$1   #option等于上面代码传入的第一个参数start
case $option in
  (submit)
    run_command submit "$@"
  (start)   #匹配到此处
    run_command class "$@"
run_command() {
   
  mode="$1"  #mode=class
  case "$mode" in
    (class)
      execute_command nice -n "$SPARK_NICENESS" "${SPARK_HOME}"/bin/spark-class "$command" "$@"
    (submit)
      execute_command nice -n "$SPARK_NICENESS" bash "${SPARK_HOME}"/bin/spark-submit --class "$command" "$@"
}

下面查看/bin/spark-class内容,简单来看最终就是运行了java -Xmx128m -cp $PATH org.apache.spar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值