spark遠端debug之除錯spark on yarn 程式(基於CDH平臺,1.6.0版本)
阿新 • • 發佈:2018-12-31
簡介
由於spark有多種執行模式,遠端除錯的時候,雖然大體步驟相同,但是還是有小部分需要注意的地方,這裡記錄一下除錯執行在spark on yarn模式下的程式。
環境準備
需要完好的Hadoop,spark叢集,以便於提交spark on yarn程式。我這裡是基於CDH的環境
步驟
1.隨便寫個spark程式,比如序列化一個集合,然後求和。然後使用maven打包,上傳至叢集。可以先提交執行一次,確保可以執行成功。
2.要讓遠端的spark程式停下來。有兩種方式,一種需要修改配置檔案,個人不喜歡這種強侵入的做法,所以只用下面這種簡單的不用修改任何東西的方式:
在spark提交程式命令中加入引數:--driver-java-options "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8787",其中埠可以自己隨便定義,別選常用的以免重複即可
例如我的提交命令如下:
[[email protected] bin]# ./spark-submit --class cn.spark.study.core.ParallelizeCollection --master yarn-cluster
--num-executors 3 --executor-cores 2 --executor-memory 1G --driver-java-options "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8787" /home/spark-study-scala-0.0.1-SNAPSHOT-jar-with-dependencies.jar
3.在IDEA中配置遠端除錯。
①找到工具欄,點選:RUN -> Edit Configurations
②新增配置
③輸入遠端主機的地址和埠號(與命令指令碼中的埠號要一致),應用確定
4.然後在主面板上,選擇自己剛剛新增的配置,然後點選debug按鈕。
5.如果運氣夠好,在下面的提示框中會出現已經建立好連線的提示。如果運氣不夠好,則會提示無法建立連線。為什麼呢?這是因為 在spark on yarn 模式下,當執行提交spark程式的命令後,那臺節點會向yarn 的ResourceManager申請啟動ApplicationMaster,相當於spark standalone模式的driver,用來管理該spark程式的執行。但是ResourceManager內部啟動ApplicationMaster,會有自己的判斷邏輯,會在某個 NodeManager上面啟動ApplicationMaster,這裡不過多介紹,姑且理解為隨機吧。所以如果剛好上面IDEA遠端除錯寫的地址,就是啟動ApplicationMaster的地址,那就能連上了,如果不是,那就連不上。
現在有兩個辦法可以解決這個問題。
第一個辦法是節點少的話,通過修改上面IDEA遠端主機地址來一個一個試。
第二辦法可以精確知道ApplicationMaster在哪裡:
①通過CDH進入yarn的應用程式介面
②然後點選進入該程式的詳細資訊介面,如下圖就可以知道Applicationmaster在哪臺NodeManager上:
③可以去該節點檢視程序,的確有一個ApplicationMaster,然後在IDEA中修改為該遠端主機地址,開始debug程式看原始碼吧!
5.如果運氣夠好,在下面的提示框中會出現已經建立好連線的提示。如果運氣不夠好,則會提示無法建立連線。為什麼呢?這是因為 在spark on yarn 模式下,當執行提交spark程式的命令後,那臺節點會向yarn 的ResourceManager申請啟動ApplicationMaster,相當於spark standalone模式的driver,用來管理該spark程式的執行。但是ResourceManager內部啟動ApplicationMaster,會有自己的判斷邏輯,會在某個
②然後點選進入該程式的詳細資訊介面,如下圖就可以知道Applicationmaster在哪臺NodeManager上:
③可以去該節點檢視程序,的確有一個ApplicationMaster,然後在IDEA中修改為該遠端主機地址,開始debug程式看原始碼吧!