spark2.0原理源码解析(一) : spark shell 脚本解析

3 篇文章 0 订阅
3 篇文章 0 订阅

之前对于spark , 主要是使用 没有太过深入的去了解底层原理 和 源码 ,在开发过程 ,发现遇到一些问题无从下手 ,准备投入源码的怀抱了 。
先从spark-shell 开始
相信许多人都 使用过spark-shell 那么 来看看 spark-shell 我们运行那个脚本到底干了什么。
Spark-shell是提供给用户即时交互的一个命令窗口,你可以在里面编写spark代码,然后根据你的命令立即进行运算。这种东西也被叫做REPL,(Read-Eval-Print Loop)交互式开发环境。
下面给出spark-shell 源码

#!/usr/bin/env bash
#先检测系统是否属于cygwin,即是否为windows系统
#-------uname在Centos中是Liunx,使用uname -r 可以查看内核版本; 使用uname -a 可以查看所有的信息
cygwin=false
case "$(uname)" in
  CYGWIN*) cygwin=true;;
esac
# Enter posix mode for bash
##-------post设置shell的模式为POSIX标准模式,不同的模式对于一些命令和操作不一样。
set -o posix
# -z是检查后面变量是否为空(空则真) shell可以在双引号之内引用变量,单引号不可
#这一步作用是检查SPARK_HOME变量是否为空,为空则执行then后面程序
#source命令: source filename作用在当前bash环境下读取并执行filename中的命令
#$0代表shell脚本文件本身的文件名,这里即使spark-shell
#dirname用于取得脚本文件所在目录 dirname $0取得当前脚本文件所在目录
#$(命令)表示返回该命令的结果
#故整个if语句的含义是:如果SPARK_HOME变量没有设置值,则执行当前目录下的find-spark-home脚本文件,设置SPARK_HOME值
if [ -z "${SPARK_HOME}" ]; then
  source "$(dirname "$0")"/find-spark-home
fi

export _SPARK_CMD_USAGE="Usage: ./bin/spark-shell [options]"

# #这段的意思是因为scala默认不会使用java classpath,因此这里需要手动设置一下,让scala使用java。
SPARK_SUBMIT_OPTS="$SPARK_SUBMIT_OPTS -Dscala.usejavacp=true"
# 从main 方法 中得知 实际上 调用的是 spark-submit  那么spark-submit 脚本到底做了什么呢 将在下一篇中介绍。
function main() {
  if $cygwin; then
    # Workaround for issue involving JLine and Cygwin
    # (see http://sourceforge.net/p/jline/bugs/40/).
    # If you're using the Mintty terminal emulator in Cygwin, may need to set the
    # "Backspace sends ^H" setting in "Keys" section of the Mintty options
    # (see https://github.com/sbt/sbt/issues/562).
    stty -icanon min 1 -echo > /dev/null 2>&1
    export SPARK_SUBMIT_OPTS="$SPARK_SUBMIT_OPTS -Djline.terminal=unix"
    "${SPARK_HOME}"/bin/spark-submit --class org.apache.spark.repl.Main --name "Spark shell" "$@"
    stty icanon echo > /dev/null 2>&1
  else
    export SPARK_SUBMIT_OPTS
    "${SPARK_HOME}"/bin/spark-submit --class org.apache.spark.repl.Main --name "Spark shell" "$@"
  fi
}

# Copy restore-TTY-on-exit functions from Scala script so spark-shell exits properly even in
# binary distribution of Spark where Scala is not installed
exit_status=127
saved_stty=""

##stty命令可以用来改变终端的显示,比如说关闭一些按键,开启一些特殊字符的输入等等。
#这个命令最常用的就是下面几个:
#-a,--all   以人可读的方式打印所有当前设置;-a参数比单独的stty命令输出的终端信息更详细
#-g,--save  以stty可读的方式打印当前所有设置
#-F,--file=DEVICE    打开并使用特定的设备((DEVICE)以代替标准输入(stdin)
#--help      显示帮助并退出
#--version   显示版本并退出

#stty  size  打印终端行数和列数
# restore stty settings (echo in particular)
function restoreSttySettings() {
  stty $saved_stty
  saved_stty=""
}

function onExit() {
  if [[ "$saved_stty" != "" ]]; then
    restoreSttySettings
  fi
  exit $exit_status
}

# to reenable echo if we are interrupted before completing.
#trap  捕获特定的信号 执行退出操作  支持的信号,可以利用kill- l查询到
# INT 的意思是 SIGINT    终止进程     中断进程
trap onExit INT

# save terminal settings  保存当前终端配置
saved_stty=$(stty -g 2>/dev/null)
# clear on error so we don't later try to restore them
if [[ ! $? ]]; then
  saved_stty=""
fi
#然后调用main方法,并传递所有的参数
main "$@"

# record the exit status lest it be overwritten:
# then reenable echo and propagate the code.
exit_status=$?
onExit

欢迎关注,更多惊喜等着你

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值