1. 程式人生 > >spark遠端debug之除錯spark on yarn 程式(基於CDH平臺,1.6.0版本)

spark遠端debug之除錯spark on yarn 程式(基於CDH平臺,1.6.0版本)

簡介 由於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程式看原始碼吧!