第一步:安装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的分析就暂告段落,如有兴趣深入研究者,请自行阅读感兴趣部分。
本文详细介绍了如何从安装Spark到下载源码,再到源码分析的过程。重点解析了Spark Shell的启动脚本、SparkSubmit类以及Spark Shell主启动类的工作原理,包括启动流程、命令组装和SparkSession的创建。通过对Spark Shell的源码解读,读者可以更深入理解其内部工作机制。

1294

被折叠的 条评论
为什么被折叠?



