1. 程式人生 > >【Spark核心原始碼】解析“spark-shell”(一)

【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的執行緒呼叫資訊最開始也就是“[email protected]”的資訊如下:

可以看出main執行緒呼叫順序如下:

原始碼細節,後面再看吧。