spark-shell解析
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解析的更多相关文章
- Spark shell的原理
Spark shell是一个特别适合快速开发Spark原型程序的工具,可以帮助我们熟悉Scala语言.即使你对Scala不熟悉,仍然可以使用这个工具.Spark shell使得用户可以和Spark集群 ...
- Spark:使用Spark Shell的两个示例
Spark:使用Spark Shell的两个示例 Python 行数统计 ** 注意: **使用的是Hadoop的HDFS作为持久层,需要先配置Hadoop 命令行代码 # pyspark >& ...
- Spark源码分析之Spark Shell(上)
终于开始看Spark源码了,先从最常用的spark-shell脚本开始吧.不要觉得一个启动脚本有什么东东,其实里面还是有很多知识点的.另外,从启动脚本入手,是寻找代码入口最简单的方法,很多开源框架,其 ...
- Spark源码分析之Spark Shell(下)
继上次的Spark-shell脚本源码分析,还剩下后面半段.由于上次涉及了不少shell的基本内容,因此就把trap和stty放在这篇来讲述. 上篇回顾:Spark源码分析之Spark Shell(上 ...
- shell解析命令行的过程以及eval命令
本文说明的是一条linux命令在执行时大致要经过哪些过程?以及这些过程的大致顺序. 1.1 shell解析命令行 shell读取和执行命令时的大致操作过程如下图: 以执行以下命令为例: echo -e ...
- [Spark内核] 第36课:TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解等
本課主題 通过 Spark-shell 窥探程序运行时的状况 TaskScheduler 与 SchedulerBackend 之间的关系 FIFO 与 FAIR 两种调度模式彻底解密 Task 数据 ...
- 使用shell解析脚本依赖关系,并自动补数
将脚本依赖关系放到表中 使用shell解析脚本依赖关系,递归的计算各个脚本. #!/bin/bash # dm 补数 basepath=$(cd ``; pwd) cd $basepath sourc ...
- 【原创 Hadoop&Spark 动手实践 5】Spark 基础入门,集群搭建以及Spark Shell
Spark 基础入门,集群搭建以及Spark Shell 主要借助Spark基础的PPT,再加上实际的动手操作来加强概念的理解和实践. Spark 安装部署 理论已经了解的差不多了,接下来是实际动手实 ...
- [Spark Core] Spark Shell 实现 Word Count
0. 说明 在 Spark Shell 实现 Word Count RDD (Resilient Distributed dataset), 弹性分布式数据集. 示意图 1. 实现 1.1 分步实现 ...
- 【大数据】Spark内核解析
1. Spark 内核概述 Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spa ...
随机推荐
- NopCommerce 3.4省市联动
做法有两种,一种是在StateProvince表里面加个字段,另一种是新建两个表,用来存市.县的数据,表结构完全按照StateProvince走就好了.我这里用的是第二种做法,菜鸟一枚,代码写的比较烂 ...
- ASP.NET WebApi 中使用swagger 构建在线帮助文档
1 在Visual Studio 中创建一个Asp.NET WebApi 项目,项目名:Com.App.SysApi(本例创建的是 .net 4.5 框架程序) 2 打开Nuget 包管理软件,查 ...
- EF Core怎么只Update实体的部分列数据
下面是EF Core中的一个Person实体: public partial class Person { public int Id { get; set; } public string Code ...
- exsi6.0远程修改密码
-------------------------------esxi远程修改root密码--------------------------- 在不接触物理机时,通过启动ssh服务,远程修改密码,具 ...
- axios和ajax,fetch的区别
1,传统 Ajax 指的是 XMLHttpRequest(XHR), 最早出现的发送后端请求技术,隶属于原始js中,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回 ...
- ASA 5.0/8.0/9.0 杂记
ASA 10.0 之前的版本都是使用odbc方式连接,由于某个项目的需求,无奈学习一下这些老掉牙的技巧. 1.新建 数据源 (不会的话,自行搜索一下) 2.使用 快捷方式 或者 其他方式 执行 C:\ ...
- Python 爬虫 (二)
cookiejar模块: 管理储存cookie,将传出的http请求添加cookie cookie存储在内存中,CookieJar示例回收后cookie将自动消失 实例:用cookjar访问人人网主页 ...
- 嘿,C语言(持续更新中...)
---恢复内容开始--- 上次简单介绍了一下C语言,这次说说数据与计算程序,那么话不多说,进来看看. 第二章 数据与简单的计算程序 一:数据 既然说到了数据,那么说说什么是写数据呢? 表面意 ...
- 005---Linux文件与目录管理
文件与目录管理 路径 绝对路径:从根目录开始的路径为绝对路径 ls /home cd /etc 相对路径:从当前路径开始描述为相对路径 cd ../../:.表示当前目录:..表示上级目录 ls ab ...
- mysql自动提交
MySQL的autocommit(自动提交)默认是开启,其对mysql的性能有一定影响,举个例子来说,如果你插入了1000条数据,mysql会commit1000次的,如果我们把autocommit关 ...