环境与版本
- OS:centos 7
- JDK版本:1.8
- Spark版本:2.1.0
- Scala版本:2.11
- IDE:intellij idea 14.1.4
前置条件
- 完成编译Spark源码并导入intellij
编写示例代码
在intellij中新建一个scala工程,取名为“RemoteDebugSparkAppDemo”,添加Spark2.1.0依赖,并编写如下的示例代码:
需要额外说明的是,getSparkContext方法中显式地设置spark.driver.host和spark.driver.port的值并非必须,单纯是为了临时解决如下错误(创建SparkContext步骤的异常):
在IDE中配置远程调试参数
在这一步中需要同时打开示例工程和Spark源码工程并分别添加远程调试参数,要注意的是示例工程依赖的Spark版本必须和源码工程完全一致
设置示例工程远程调试参数
在打开的示例工程“RemoteDebugSparkAppDemo”中,设置远程调试JVM选项,步骤如下:
在intellij中打开”Run -> Edit Configuations…”,修改下图中的选项
将该选项的值设置为:
设置Spark源码工程远程调试参数
用intellij打开Spark源码工程,打开”Run -> Edit Configuations…”,添加一个新的Remote类型的Configuation项目,取名为RemoteDebug,并按照下图进行配置:
测试远程调试
在打开的源码工程的IDE中,设置一个断点,比如设置在DAGScheduler类的runJob方法中(设置在其他预期会进入的方法也OK),
执行”Run -> Debug ‘RemoteDebug’”,观察IDE的Debugger窗口,如果出现下面的提示,则说明已经开始在本机的5005端口监听远程调试的客户端:
然后在示例工程中执行”Run -> Run ‘MainApp’”,如果一切顺利,将会在源码工程IDE的console窗口中打印以下提示:
上面的”target VM”指的就是运行中的示例程序。
同时,源码工程会命中之前设置的断点。
调试结束后,源码工程IDE的console窗口会打印以下提示: