huhahapz 发表于 2019-1-30 11:33:08

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

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

  1、实验环境
IPhostnamemasterworker192.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",启动监听程序,此命令执行后,控制台打印如下:

http://s3.运维网.com/wyfs02/M00/57/B3/wKioL1SjU-7QGQmlAADU6EiCCn0689.jpg此监听已启动,此时就可以通过本地代码进行调试
  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函数中增加断点

http://s3.运维网.com/wyfs02/M01/57/B4/wKioL1SjVejB9i7TAAWKYTwG2aY145.jpg
  (2)IDE中配置远程调试

http://s3.运维网.com/wyfs02/M01/57/B4/wKioL1SjVsDASIOoAAR6toDPghI831.jpg
http://s3.运维网.com/wyfs02/M01/57/B7/wKiom1SjVgvyfycNAAOnr8ukQWQ552.jpg
  (3)debug启动

http://s3.运维网.com/wyfs02/M01/57/B7/wKiom1SjVseQxE5bAAX1RQqq-fc628.jpg
  上图显示的就是调试的页面,可以任意增加断点,并调试执行,在控制台打印
http://s3.运维网.com/wyfs02/M00/57/B7/wKiom1SjV0DhQ7aLAAVNGcjtdJ8447.jpg远程调试成功。
深入学习可查看IBM的以下链接,详细介绍了java的调试体系
http://www.ibm.com/developerworks/cn/views/java/libraryview.jsp?search_by=%E6%B7%B1%E5%85%A5+Java+%E8%B0%83%E8%AF%95%E4%BD%93%E7%B3%BB


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




页: [1]
查看完整版本: 远程调试spark源码(基于java的调试工具)