环境:

spark 2.3.3

scala 2.11.8

Java 1.8.0_141

 

接上篇【 spark-shell启动命令详细解析1

下面我们来看下org.apache.spark.repl.Main是如何处理spark-shell中输入的命令的

在org.apache.spark.repl.Main$main方法中,调用doMain方法

spark-shell启动命令详细解析2

 

通过doMain方法,调用SparkILoop$process方法

spark-shell启动命令详细解析2

 

SparkILoop是spark交互式shell,继承自ILoop,ILoop是scala的交互式shell。

spark-shell启动命令详细解析2

 

那scala既然有自己的交换式shell,spark为啥还要再自己实现一个SparkILoop呢?

在Spark的原始论文中有简单提到:

Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing. 

由于spark是分布式集群,spark-shell中的代码需要序列化到不同的节点

    6.1 Interpreter Integration

spark-shell启动命令详细解析2

 

SparkILoop直接使用ILoop的process方法

spark-shell启动命令详细解析2

 

spark-shell启动命令详细解析2

调用SparkILoop的loadFiles方法

spark-shell启动命令详细解析2

在loadFiles方法中,会调用SparkILoop的initializeSpark方法,进行spark/sparkContext的初始化

spark-shell启动命令详细解析2

而initializationCommands变量中存放的就是spark/sparkContext的初始化语句

spark-shell启动命令详细解析2

这些日志即spark-shell启动中的日志:

spark-shell启动命令详细解析2

spark-shell启动命令详细解析2

调用SparkILoop的printWelcome方法:

spark-shell启动命令详细解析2

就是spark-shell启动过程中的欢迎信息

spark-shell启动命令详细解析2

然后调用loop方法,读取一行代码处理

spark-shell启动命令详细解析2

 

 spark-shell启动命令详细解析2

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-20
  • 2021-11-20
  • 2021-12-04
  • 2021-11-19
  • 2021-11-20
猜你喜欢
  • 2021-04-27
  • 2021-11-19
  • 2021-11-19
  • 2021-07-06
  • 2021-09-17
相关资源
相似解决方案