【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執行緒呼叫順序如下:
原始碼細節,後面再看吧。