Spark源码IDEA远程调试

本文介绍了如何启动带有远程调试配置的Spark Application,并在IntelliJ IDEA中设置远程调试,通过指定主机IP和端口连接到Spark Driver。详细步骤包括观察Spark启动输出、设置IDE调试配置以及在IDE中设置断点进行源码调试。
我们在编写 Spark Application或者是阅读源码的时候,我们很想知道代码的运行情况,比如参数设置的是否正确等等。用Logging方式来调试是一个可以选择的方式,但是,logging方式调试代码有很多的局限和不便。下面是介绍如何通过IDE来远程调试 Spark的Application或者是 Spark的源码。
  本文以调试Spark Application为例进行说明,本文用到的IDE是IntelliJ IDEA。步骤如下:
   一、JVM里面设置以下参数
1-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8888
这里对上面的几个参数进行说明:
-Xdebug 启用调试特性
-Xrunjdwp 启用JDWP实现,包含若干子选项:
transport=dt_socket JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。
address=8888 JVM在8888端口上监听请求,这个设定为一个不冲突的端口即可。
server=y y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。
suspend=y y表示启动的JVM会暂停等待,直到调试器连接上才继续执行。suspend=n,则JVM不会暂停等待。
此参数设置在$SPARK_HOME/conf/spark_env.sh的spark_classpath变量里
export SPARK_JAVA_OPTS+="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8888"

  二、启动Spark Application
  启动Spark Application的时候我们可以在终端看到如下输出:

1[iteblog.com@spark spark]$ ./bin/spark-submit --class scala.WordCount 
2            --master yarn-cluster    
3            --queue queue1      
4            --num-executors 30 
5            --executor-memory 512m    
6            --executor-cores 2    
7            spark-1.0-SNAPSHOT.jar /home/wyp/shuffle /home/wyp/sparkshuffle
8Spark assembly has been built with Hive, including Datanucleus jars on classpath
9Listening for transport dt_socket at address: 8888

如果你看到第九行的输出(Listening for transport dt_socket at address: 8888),那恭喜你了,启动了远程调试。而且Spark Application正在等待我们的IDE连接它。
  三、在IntelliJ IDEA设置远程调试的IP和Port
  依次选择Edit Configurations->点击左上角的+号->Remote->在弹出的页面里面将Host和Port两个选项设置为你Driver运行所在节点机器的IP和Port。
  设置完后,设置好程序的断电,然后再点击IDE上面的 Debug 按钮(就是那个虫子按钮)。
  这时候,程序会继续运行,而且在IDE里面会输出以下信息

1Connected to the target VM, address: 'www.iteblog.com:8888', transport: 'socket'

而且程序会跳到你设置断点的地方,你可以在你IDE的Dubegger里面看到如下的信息:



  那么恭喜你了,开始你的源码调试之路吧。

注意事项:

设置encoding值,

否则有中文的时候报错


若有此类错误,最好不要有中文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值