Spark 个人实战系列(2)--Spark 服务脚本分析

前言:

  spark最近非常的火热, 本文不讲spark原理, 而是研究spark集群搭建和服务的脚本是如何编写的, 管中窥豹, 希望从运行脚本的角度去理解spark集群. 研究的spark为1.0.1版. spark集群采用standalone模式搭建, 其基础架构为master-slave(worker模式, 单master+多slave(worker)节点构成.

脚本目录

start-all.sh 作用: 启动整个集群
stop-all.sh 作用: 关闭整个集群
start-master.sh 作用: 启动master节点
stop-master 作用: 关闭master节点
start-slaves.sh 作用: 启动整个集群的slave节点
start-slave.sh 作用: 启动单节点slave

总体脚本的依赖关系图如下:

*) 分析脚本start-all.sh

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

评注:
# 1. 载入执行spark-config.sh
# 2. 启动Master节点
# 3. 启动各个slave(worker)节点

*) 先来研究下sbin/spark-config.sh脚本

1
2
3
export SPARK_PREFIX=`dirname "$this"`/..
export SPARK_HOME=${SPARK_PREFIX}
export SPARK_CONF_DIR="$SPARK_HOME/conf"

评注:
# spark-config.sh的作用是常用的环境变量SPARK_HOME, SPARK_CONF_DIR的导出

*) 脚本start-master.sh分析

1
2
3
4
5
6
. "$sbin/spark-config.sh"
. "$SPARK_PREFIX/bin/load-spark-env.sh"
 
"$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

评注:
# source spark-config.sh, load-spark-env.sh之后
# 借助spark-daemon.sh脚本, 启动Master服务, 并传入相关的参数, Master绑定IP/Port, 以及webui的端口

*) 对load-spark-env.sh脚本进行解读

1
2
3
4
5
6
7
8
9
10
11
12
if [ -z "$SPARK_ENV_LOADED" ]; then
  export SPARK_ENV_LOADED=1
  # Returns the parent of the directory this script lives in.
  parent_dir="$(cd `dirname $0`/..; pwd)"
  use_conf_dir=${SPARK_CONF_DIR:-"$parent_dir/conf"}
  if [ -f "${use_conf_dir}/spark-env.sh" ]; then
    # Promote all variable declarations to environment (exported) variables
    set -a
    . "${use_conf_dir}/spark-env.sh"
    set +a
  fi
fi

评注:
# 很重要的一步是导入了conf/spark-env.sh, 把用户自定义的变量参数全部生效,替换默认值

*) 对start-slaves.sh的解析

1
2
3
4
5
6
7
8
9
10
11
12
13
# 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

评注:
# $SPARK_WORKER_INSTANCES指定单机运行多个slave(worker)进程数
# 具体流程, 每个worker实例执行sbin/slaves.sh, 该脚本的执行参数是执行"sbin/start-slave.sh", 同时每个slave(worker)节点都指定了自己的WEB UI端口

*) sbin/slaves.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
. "$SPARK_PREFIX/bin/load-spark-env.sh"
 
if [ "$HOSTLIST" = "" ]; then
  if [ "$SPARK_SLAVES" = "" ]; then
    export HOSTLIST="${SPARK_CONF_DIR}/slaves"
  else
    export HOSTLIST="${SPARK_SLAVES}"
  fi
fi
 
# By default disable strict host key checking
if [ "$SPARK_SSH_OPTS" = "" ]; then
  SPARK_SSH_OPTS="-o StrictHostKeyChecking=no"
fi
 
for slave in `cat "$HOSTLIST"|sed "s/#.*$//;/^$/d"`; do
  ssh $SPARK_SSH_OPTS $slave $"${@// /\\ }" \
    2>&1 | sed "s/^/$slave: /" &
  if [ "$SPARK_SLAVE_SLEEP" != "" ]; then
    sleep $SPARK_SLAVE_SLEEP
  fi
done

评注:
# sbin/slaves.sh脚本, 载入了conf/slaves文件(配置slaves节点), 详见上一篇
# 同时为每个slave节点执行
# sbin/start-slave.sh $(( $i + 1 )) spark://$SPARK_MASTER_IP:$SPARK_MASTER_PORT \
#      --webui-port $(( $SPARK_WORKER_WEBUI_PORT + $i ))

*) sbin/start-slave.sh脚本解析

1
"$sbin"/spark-daemon.sh start org.apache.spark.deploy.worker.Worker "$@"

评注:
# 借助spark-daemon.sh, 运行org.apache.spark.deploy.worker.Worker即可

*) sbin/spark-daemon.sh脚本分析
spark-daemon.sh 脚本最后还是借助bin/spark-class来实现, 对jvm参数进行了设定

 

posted on   mumuxinfei  阅读(1516)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示