Spark内核源码(一)---提交源码

Spark内核源码—提交源码

在这里插入图片描述
特此声明:分享一波提交源码,此源码手稿,均来自本人的印象笔记手稿,纯手敲,欢迎来怼原创
在这里插入图片描述
打开这个脚本之后,我们会发现,其实就是在找到最底下的CMD
在这里插入图片描述
在这里插入图片描述
其实就是一个JAVA的指令
在这里插入图片描述
我们将他们组合组合来试试,封装组合完成之后,看看是什么样的首先它是这样的,在第一个文件的最底下
在这里插入图片描述
然后我们来到了Spark-Class文件中,找到了CMD那里,然后CMD往上走,走到build_command,然后里面走的是JAVA那里,我们把类之前的拿过来,继续组装替换

spark-class org.apache.spark.deploy.SparkSubmit
$RUNNER -Xmx128m -cp org.apache.spark.deploy.SparkSubmit

我们再将RUNNER替换掉,去找RUNNER方法中的参数组装,将参数进行封装之后,就是下面的样子

${JAVA_HOME}/bin/java -Xmx128m -cp org.apache.spark.deploy.SparkSubmit

如果我们将前面JAVA的环境变量去掉之后呢?

/bin/java -Xmx128m -cp org.apache.spark.deploy.SparkSubmit

我们早期学的JAVA Test和这个有什么区别呢?没有任何区别,只不过额外增加一些虚拟机的启动参数,含义是一样的,所以基本都一样了,当我们启动JAVA执行这个Test命令的时候会启动一个JAVA进程,所以我们经常会用到一个指令就是JPS,这个就是查看进程的,那么Test会启动,那我们上面的那个命令也一样会启动。那么,Test启动的时候,会调用一个静态的main方法,那么上面的类也一定会调用这个静态的main方法,我们去验证一下,复制这个类,粘贴到IDEA中,查看一下

将这个粘贴到IDEA中 org.apache.spark.deploy.SparkSubmit

在这里插入图片描述
在这里插入图片描述
我们从现在开始好好的刨析一下这个SparkSubmit,我们打开虚拟机端的Spark,会发现也有一个SparkSubmit
在这里插入图片描述
这个就是我们源码中的那个SparkSubmit这个伴生对象的进程,它一定会走这个main方法而我们下面的源码中,我们会看到好多声明方法,我们全都过,因为源码中的声明方法不是那么特别重要,我们看源码,肯定是看调用了哪个方法,我们往下走会发现main方法中有个叫submit的对象,而它调用了哪个方法呢?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
它把args传过来了,但是它在解析什么呢?我们点一下看一下
在这里插入图片描述
我们点进去看一眼,它是怎么转换的,到底在干嘛
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
** 这里总结:首先这个方法里面运用了模式匹配,意思是你今天传过来一个NAME,我就给你对应的属性,你传过来一个MASTER,我也会给你一个对应的属性。那么,解析参数,就是在解析命令行参数。其中最简单的就是哪个–master,它会将哪个yarn拿过来,其实不光是–master,我们点击一下CLASS去看一下,看下图:**
在这里插入图片描述
在这里插入图片描述
那么我们之前的命令是什么样的?命令回顾:
在这里插入图片描述
这个–class不就是我们自己写的应用程序么,我们写xxxxx.Application或者是xxxxx.WordCount,而且我们会发现它将–class给了下面的mainClass = value,之前的–master给了它下面的master = value,我们有了一个参数大概的封装。后面还有很多,这里建议自己看。我们知道怎么传参就OK了那么我们再回过头看这个方法,就彻底明白了,它再封装参数,在解析参数
在这里插入图片描述
我们往下滑动再看看
在这里插入图片描述
在这里插入图片描述
这里很奇怪,它为NULL,而它前面又在做模式匹配,而且模式匹配中,没有NULL,应该有下划线才对,这就说明,action这个值,进来的时候就已经被附上值了,它根本不可能为NULL,这是一种关联,这就好比在程序运行的过程中,绝对不能运行抽象方法一样,你抽象方法不完整,怎么可能运行,当我们发现调用的方法为抽象,那么它就一定有问题。它一定是在运行的时候给了我们具体的类,或者一个完整的方法,这都是我们看源码的时候所需要掌握的一个硬核的技巧。所以我们发现这个action它一定赋值了,我们有必要找一找,直接搜索:
在这里插入图片描述
Option这个方法,是一个选项类型,它类似于判断,判断你传进来的参数,要么有值,要么无值,所以我们点一下它
在这里插入图片描述
在这里插入图片描述
这个判断已经说的很明确了,如果是NULL就返回一个None,有值就返回一个Some我们再回来会发现有个方法叫getOrElse
在这里插入图片描述
在这里插入图片描述
如果是空我们返回default,如果不是空我们返回得到的值,所以说我们如果为NULL,我们就返回默认值,所以哪个action,就应该是SUBMIT
在这里插入图片描述
我们回去再看那个方法中的模式匹配,它就应该是SUBMIT,就应该走第一条源码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从字面意义上理解,就是执行主程序
在这里插入图片描述
在这里插入图片描述
我们看到这里肯定是要点进去看一下了
在这里插入图片描述
在这里插入图片描述
只要是runMain这个方法走完,提交就结束

猜你喜欢

转载自blog.csdn.net/weixin_45284133/article/details/106595363