如何使用IDEA远程调试
问题
在Spark二次开发中如何使用IDEA远程调试?
回答
以调试SparkPi程序为例,演示如何进行IDEA的远程调试:
- 打开工程,在菜单栏中选择 。
- 在弹出的配置窗口中用鼠标左键单击左上角的号,在下拉菜单中选择Remote,如图1所示。
- 选择对应要调试的源码模块路径,并配置远端调试参数Host和Port,如图2所示。
其中Host为Spark运行机器IP地址,Port为调试的端口号(确保该端口在运行机器上没被占用)。
当改变Port端口号时,For JDK1.4.x对应的调试命令也跟着改变,比如Port设置为5006,对应调试命令会变更为-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006,这个调试命令在启动Spark程序时要用到。
- 执行以下命令,远端启动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对应的调试命令。
图3 Spark运行命令
- 设置调试断点。
在IDEA代码编辑窗口左侧空白处单击鼠标左键设置相应代码行断点,如图4所示,在SparkPi.scala的29行设置断点。
- 启动调试。
在IDEA菜单栏中选择 开启调试窗口,接着开始SparkPi的调试,比如单步调试、查看调用栈、跟踪变量值等,如图5所示。