spark java 调试_远程调试spark源码(基于java的调试工具)

开发人员在进行程序编码的过程中,不可避免的需要对代码进行调试,其目的是能精确定位程序的运行状况。本文对spark源码进行调试,此调试方式可以调试任何JVM相关的程序,如:普通的命令行程序、web程序等。

1、实验环境

IPhostnamemasterworker

192.168.56.101master是否

192.168.56.102node1否是

192.168.56.103node2否是

192.168.56.104node3否是

2、spark-submit命令启动spark应用程序,并打开调试监听bin/spark-submit --class sparksql.HiveOnSQL scalastudy.jar --driver-java-options -agentlib:jdwp=transport=dt_socket,address=9904,server=y,suspend=y

说明:

这里spark-submit命令不做具体介绍,需要注意的是--driver-java-options参数,此参数是增加jvm相关参数这里使用"-agentlib:jdwp=transport=dt_socket,address=9904,server=y,suspend=y",启动监听程序,此命令执行后,控制台打印如下:

c84ecd7481274e84043d20270765d82b.png此监听已启动,此时就可以通过本地代码进行调试

3、调试方式

服务器打开一个9904的端口进行监听。客户端通过jdb或IDE中configurations配置即可连接。

1)jdb方式:在命令行$JAVA_HOME/bin/jdb -attach 10.68.156.40:9904进行连接

2)eclipse方式:Run->debug configurations->XX应用程序->Connection Properties中配置host和port

3)IDEA方式:Run->Edit configurations->"+"->Remote配置host和port

下面着重介绍IDEA方式,其他方式都差不多,读者可以自行尝试

(1)在IDEA中打开spark源码

由于spark-submit命令将会启动SparkSubmit.scala中的main函数,因此我们找到spark源码中的SparkSubmit.scala文件,并在main函数中增加断点

spark java 调试_远程调试spark源码(基于java的调试工具)_第1张图片

(2)IDE中配置远程调试

spark java 调试_远程调试spark源码(基于java的调试工具)_第2张图片

spark java 调试_远程调试spark源码(基于java的调试工具)_第3张图片

(3)debug启动

spark java 调试_远程调试spark源码(基于java的调试工具)_第4张图片

上图显示的就是调试的页面,可以任意增加断点,并调试执行,在控制台打印

spark java 调试_远程调试spark源码(基于java的调试工具)_第5张图片远程调试成功。

深入学习可查看IBM的以下链接,详细介绍了java的调试体系

查看现有系统stack,可以使用jdk提供的如下命令

jstack [pid] > javastack.log

你可能感兴趣的:(spark,java,调试)