Spark-Shell 详解-源码分析

本文详细介绍了如何从安装Spark到下载源码,再到源码分析的过程。重点解析了Spark Shell的启动脚本、SparkSubmit类以及Spark Shell主启动类的工作原理,包括启动流程、命令组装和SparkSession的创建。通过对Spark Shell的源码解读,读者可以更深入理解其内部工作机制。

第一步:安装spark

略。

第二步:下载saprk源码

下载地址:https://github.91chifun.workers.dev//https://github.com/apache/spark/archive/v2.4.0.zip

下载解压到指定目录,并在idea中导入:

注意:idea要配置jdk,并安装scala插件,配置scala支持

第三步:源码解读

项目源码结构:

3.1 启动脚本-源分析

首先查看bin目录下的spark-shell脚本:

图中可以看出,通过spark-submit 脚本提交了一个名称叫Spark shell的任务,传递org.apahce.spark.repl.Main作为任务主类.

接着,我们看spark-submit脚本:

可以看见:通过spark-class脚本 传递 org.apache.spark.deploy.SparkSubmit 参数。

继续查看spark-class文件:

可以看出,启动了org.apache.spark.launcher.Main类构建启动命令,并通过脚本调用。

先看org.apache.spark.launcher.Main类:

可以发现,main方法中进行了参数检查、命令组装、命令打印等工作。

3.2SparkSubmit启动类-源码分析

接下来我们可以去查看正式启动类:org.apache.spark.deploy.SparkSubmit

可以看出,在启动方法中构造了SparkSubmit对象,调用了SparkSubmit的doSubmit方法。

在SparkSubmit类中,通过模式匹配,匹配4中操作中的SUBMIT。

submit方法中又调用了doRunMain->runMain:

上图末尾的mainClass 即为:org.apahce.spark.repl.Main

SparkApplication启动mainClass中的main方法:

3.3 spark-shell主启动类-源码分析

接下来,我们看org.apahce.spark.repl.Main类:

main方法中传递了SparkILoop对象调用doMain方法;继续跟踪doMain方法:

调用了process方法

process方法中调用了 startup方法,并通过模式匹配进行命令行结果打印。

3.4 spark-shell初始化源码分析

查看初始化方法:

初始化spark方法:

查看初始化命令:

可以发现其中通过 org.apache.spark.repl.Main.createSparkSession() 创建sparkSession,并定义了spark【SparkSession】和sc【SparkContext】变量,所以我们在spark-shell中可以直接使用这两个变量。

再回看org.apache.spark.repl.Main中的createSparkSession方法,可以看到SparkSession的创建过程和spark.app.name 默认为Spark shell。

至此,我们对spark-shell的分析就暂告段落,如有兴趣深入研究者,请自行阅读感兴趣部分。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

long-king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值