
# 如何使用IDEA远程调试
#### 问题
在Spark二次开发中如何使用IDEA远程调试？
#### 回答
以调试SparkPi程序为例，演示如何进行IDEA的远程调试：
1. 打开工程，在菜单栏中选择"Run \> Edit Configurations"。
2. 在弹出的配置窗口中用鼠标左键单击左上角的![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001252371998.png)号，在下拉菜单中选择Remote，如[图1]所示。
   图1选择Remote   
   ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001299051253.png "点击放大") 
3. 选择对应要调试的源码模块路径，并配置远端调试参数Host和Port，如[图2]所示。
   其中Host为Spark运行机器IP地址，Port为调试的端口号（确保该端口在运行机器上没被占用）。
   图2配置参数   
   ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001252212286.png "点击放大")
   ![](https://support.huaweicloud.com/devg-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   当改变Port端口号时，For JDK1.4.x对应的调试命令也跟着改变，比如Port设置为5006，对应调试命令会变更为-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006，这个调试命令在启动Spark程序时要用到。
   
4. 执行以下命令，远端启动Spark运行SparkPi。 *./spark-submit --master yarn-client --driver-java-options* *"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006"* *--class org.apache.spark.examples.SparkPi* */opt/FI-Client/Spark2x/spark/examples/jars/spark-examples_2.12-3.1.1-xxx.jar*
   用户调试时需要把--class和jar包换成自己的程序，-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006需要换成[3]获取到的For JDK1.4.x对应的调试命令。
   图3Spark运行命令   
   ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001252531774.png "点击放大") 
5. 设置调试断点。 在IDEA代码编辑窗口左侧空白处单击鼠标左键设置相应代码行断点，如[图4]所示，在SparkPi.scala的29行设置断点。
   图4设置断点   
   ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001252691030.png "点击放大") 
6. 启动调试。 在IDEA菜单栏中选择"Run \> Debug 'Unnamed'"开启调试窗口，接着开始SparkPi的调试，比如单步调试、查看调用栈、跟踪变量值等，如[图5]所示。
   图5调试   
   ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001299211273.png "点击放大") 
 
