spark-shell 作用:

调用spark-submit脚本,如下参数 --classorg.apache.spark.repl.Main --name "Spark shell" "$@",如下:

具体流程是:

#1 捕获终端信号,执行退出方法,恢复一些操作

#2 保存终端配置,当cygwin时关闭回显,之后再恢复

#3 执行spark-submit,调用repl.Main

#先检测系统是否属于cygwin,即是否为windows系统

#-------uname在Centos中是Liunx,使用uname -r 可以查看内核版本; 使用uname -a 可以查看所有的信息

cygwin=false

case"`uname`" in 

  CYGWIN*) cygwin=true;;

esac

#-------post设置shell的模式为POSIX标准模式,不同的模式对于一些命令和操作不一样。

set-o posix

#如果没有设置SPARK_HOME,shell会将当前脚本的上一级目录做为spark_home

# -z表示当串长度为0时,条件为真。  而$()和`` 都表示在shell中执行命令同时将结果返回

if [-z "${SPARK_HOME}" ]; then

  export SPARK_HOME="$(cd "`dirname"$0"`"/..; pwd)"

fi

#这段的意思是因为scala默认不会使用java classpath,因此这里需要手动设置一下,让scala使用java。

SPARK_SUBMIT_OPTS="$SPARK_SUBMIT_OPTS-Dscala.usejavacp=true"

function main() {


if $cygwin; then


stty -icanon min 1 -echo > /dev/null2>&1


exportSPARK_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


#如果不是cygwin系统,执行spark_home/bin/spark-submit的脚本,指定--class是org.apache.spark.repl.Main


#spark_shell 后面通常会跟着--master spark://host:7077


export SPARK_SUBMIT_OPTS


"${SPARK_HOME}"/bin/spark-submit--class org.apache.spark.repl.Main --name "Spark shell""$@"


fi


}

exit_status=127

saved_stty=""



#restore stty settings (echo in particular)

functionrestoreSttySettings() {


stty $saved_stty


saved_stty=""


}

functiononExit() {


if [[ "$saved_stty" != ""]]; then


restoreSttySettings


fi

exit $exit_status

}



# toreenable echo if we are interrupted before completing.


#这句是说,捕获INT信号,INT表示中断线程或进程,就会回调执行onExit方法。onExit中判断是否恢复终端设置。


trap onExit INT


#save terminal settings http://www.cnblogs.com/xing901022/p/6415289.html


######改变终端的显示,比如说关闭一些按键,开启一些特殊字符的输入等等。


#----stty-g 表示将当前终端的回显保存起来(stty -g,--save 表示以stty可读的方式打印当前所有设置)


saved_stty=$(stty-g 2>/dev/null)

#clear on error so we don't later try to restore them

#-----如果stty -g执行错误,需要将saved_stty设置成空串

if[[ ! $? ]]; then

saved_stty=""

fi



#######此处会将spark-shell后面的所有参数,都给main方法


main"$@"


######################################################


#运行test.sh 1 2 3后

# "$*"的意思为"1 2 3"(一起被引号包住)

# "$@"为"1""2" "3"(分别被包住,好处就是传给main方法就不用再做切分了)

# $#:表示脚本参数个数


######################################################


#record the exit status lest it be overwritten:


#then reenable echo and propagate the code.


exit_status=$?


onExit

本文转自:https://blog.csdn.net/luyllyl/article/details/79554580

spark-shell解析的更多相关文章

  1. Spark shell的原理

    Spark shell是一个特别适合快速开发Spark原型程序的工具,可以帮助我们熟悉Scala语言.即使你对Scala不熟悉,仍然可以使用这个工具.Spark shell使得用户可以和Spark集群 ...

  2. Spark:使用Spark Shell的两个示例

    Spark:使用Spark Shell的两个示例 Python 行数统计 ** 注意: **使用的是Hadoop的HDFS作为持久层,需要先配置Hadoop 命令行代码 # pyspark >& ...

  3. Spark源码分析之Spark Shell(上)

    终于开始看Spark源码了,先从最常用的spark-shell脚本开始吧.不要觉得一个启动脚本有什么东东,其实里面还是有很多知识点的.另外,从启动脚本入手,是寻找代码入口最简单的方法,很多开源框架,其 ...

  4. Spark源码分析之Spark Shell(下)

    继上次的Spark-shell脚本源码分析,还剩下后面半段.由于上次涉及了不少shell的基本内容,因此就把trap和stty放在这篇来讲述. 上篇回顾:Spark源码分析之Spark Shell(上 ...

  5. shell解析命令行的过程以及eval命令

    本文说明的是一条linux命令在执行时大致要经过哪些过程?以及这些过程的大致顺序. 1.1 shell解析命令行 shell读取和执行命令时的大致操作过程如下图: 以执行以下命令为例: echo -e ...

  6. [Spark内核] 第36课:TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解等

    本課主題 通过 Spark-shell 窥探程序运行时的状况 TaskScheduler 与 SchedulerBackend 之间的关系 FIFO 与 FAIR 两种调度模式彻底解密 Task 数据 ...

  7. 使用shell解析脚本依赖关系,并自动补数

    将脚本依赖关系放到表中 使用shell解析脚本依赖关系,递归的计算各个脚本. #!/bin/bash # dm 补数 basepath=$(cd ``; pwd) cd $basepath sourc ...

  8. 【原创 Hadoop&Spark 动手实践 5】Spark 基础入门,集群搭建以及Spark Shell

    Spark 基础入门,集群搭建以及Spark Shell 主要借助Spark基础的PPT,再加上实际的动手操作来加强概念的理解和实践. Spark 安装部署 理论已经了解的差不多了,接下来是实际动手实 ...

  9. [Spark Core] Spark Shell 实现 Word Count

    0. 说明 在 Spark Shell 实现 Word Count RDD (Resilient Distributed dataset), 弹性分布式数据集. 示意图 1. 实现 1.1 分步实现 ...

  10. 【大数据】Spark内核解析

    1. Spark 内核概述 Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spa ...

随机推荐

  1. 我想写一个前端开发工具(三):优化!从vue-cli学了几招

    我从过年开始写自己的前端工具 coodev,目前已经写出一个基本的架子,大多数预想的功能都能跑通,还剩一些需要解决的问题也都已经列出来了.本来这一周打算解决对不同后端模板的前后端渲染支持的问题.但是看 ...

  2. Linux -- 用户篇

    Linux -- 用户与用户组 1.Linux 系统中有三种角色:所有者(用户),用户组与其他人,一张图可以说明用户与用户组的关系. 如图,某公司相当于一个用户组,该用户组下有A,B两个用户,用户拥有 ...

  3. pom.xml文件报MavenArchiver错误 org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration)

    第一种方式 war项目 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId> ...

  4. 使用PHPExcel 读取 表格数据, 发现中文全变成 FALSE??

    出现这样的情况, 你可以看看你的表格是不是 CSV 格式的. 如果是, 那就赶紧另保存为 xls.xlsx 等格式的表格 . 因为 PHPExcel 对 Csv 的表格不感冒....

  5. Bigdata--hadoop系列安装

    Date:20180827 Monday 目前市场hadoop主流版本是2.7.x系列,下面我们就以hadoop-2.7.3为例进行安装 安装前准备: 1.操作系统:cetos(6和7) 2.java ...

  6. netfilter 学习摘要

    netfilter 子系入口在L3,完成后把数据包发往L4 netfilter 主要功能: 数据包选择(iptables) 数据包过滤 网络地址转换(NAT) 数据包操纵(在路由选择之前或之后修改数据 ...

  7. hadoop 1.x 集群环境的搭建

    本文主要以个人工作学习总结为主,同时也为了方便更多的兴趣爱好者参与学习交流,现将具体的搭建步骤分享如下: 一.基础环境 1.1 jdk的安装与配置 Hadoop是用Java开发的,Hadoop的编译及 ...

  8. 批量改变图片的尺寸大小 python opencv

    我目标文件夹下有一大批图片,我要把它转变为指定尺寸大小的图片,用pthon和opencv实现的. 以上为原图片. import cv2 import os # 按指定图像大小调整尺寸 def resi ...

  9. python类的多态

    1. 什么是多态     多态指的是同一种/类事物的不同形态   2. 为何要用多态     多态性:在多态的背景下,可以在不用考虑对象具体类型的前提下而直接使用对象     多态性的精髓:统一   ...

  10. Simple, Poetic, Pithy

    源自:Rob Pike points out Simple, Poetic, Pithy Don't communicate by sharing memory, share memory by co ...