【Spark内核源码】解析“spark-shell”(一)

目录

脚本分析

远程监控


之前使用spark-shell,编写了一个word count程程序【初探Spark内核】Word Count程序的简单分析 ,spark-shell究竟都为我们做了些什么,下面就好好分析一下。

脚本分析

当我们输入指令“spark-shell”的时候,我们是调用了SPARK_HOME/bin/spark-shell脚本。这个脚本大致的调用过程是这样的:

spark-shell脚本中设置了main方法,做了一些准备工作后,这个方法执行了${SPARK_HOME}"/bin/spark-submit脚本:

   spark-shell脚本的最后执行了main方法

spark-submit脚本中执行了${SPARK_HOME}"/bin/spark-class脚本,并传递了参数“org.apache.spark.deploy.SparkSubmit”:

 spark-class脚本中干了首先要找到JAVA_HOME:

其次引用了spark的相关jar包:

接着载入了hadoop和yarn的相关配置:

最后设置并启动JVM执行org.apache.spark.deploy.SparkSubmit:

由此可见,org.apache.spark.deploy.SparkSubmit是spark任务提交的主要进程。

远程监控

在SPARK_SUBMIT_OPTS="$SPARK_SUBMIT_OPTS -Dscala.usejavacp=true"追加如下内容:

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10207 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

执行spark-shell脚本后,在本地机器上打开“jvisualvm.exe”,并配置远程监控,增加JMX链接,链接的端口号跟上面配置的要保持一致

在线程中找到"main"线程,并点击【线程Dump】按钮

进入此页面:

 main的线程调用信息最开始也就是“t@1”的信息如下:

可以看出main线程调用顺序如下:

源码细节,后面再看吧。

猜你喜欢

转载自blog.csdn.net/lazy_moon/article/details/82874145
今日推荐