在学习Spark源码或者开发过程中,往往需要远程调试Spark。下面将介绍如何在IDEA下对Spark源码进行远程调试。
调试前准备工作
-
下载需要调试的Spark对应的版本源码,并用make-distribution.sh编译方式对Spark源码进行编译(由于可能涉及到源码的修改问题,为便于修改后源码的编译和调试,选择该种方式进行编译,并利用编译生成的.tgz包安装Standalone模式的Spark)。
-
安装Spark集群(Standalone模式,为了减少工作量,此处Spark安装均在root用户下操作,并且Master和Worker都工作在同一台机器上)
-
解压.tgz包到指定目录
-
修改slaves文件,添加Worker节点IP
-
修改spark-defaults.conf文件
-
修改spark-env.sh文件(添加下列选项,注意SPARK_WORK_DIR对应的目录需要Spark启动前创建好)
-
远程调试
-
Master和Worker的调试
Master和Worker的调试涉及到Spark集群和本地IDEA的设置
-
对Spark集群进行设置:修改spark-env.sh文件,在文件中追加以下内容:
export SPARK_MASTER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=10000"
export SPARK_WORKER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=10001"
保存退出,并执行./sbin/start-all.sh命令重新启动集群。
-
IDEA设置:添加远程调试
-
分别打开Master.scala和Worker.scala文件,针对每个文件,点击图中选项右上角,然后点击Edit Configurations...选项;
-
点击左边绿色“+”号,选择“Remote”选项,如图所示:
在弹出的tab页中,修改相关参数信息,如下图所示
设置完成后点击“Apply”和“OK”退出。
-
如下图所示,先在代码中打上断点,然后点击“debug”启动调试。(注意顺序:先打断点再启动调试)
-
-
-
Application调试(Standalone模式,其它模式类似)
与Master和Worker的远程调试类似,首先需要把待调试的Application添加到remote中,然后再集群上提交该Application并设置debug参数。application提交脚本如下所示:
spark-submit --master spark://localhost:7077 --driver-java-options "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=10002" --class org.apache.spark.examples.LogQuery spark-examples_2.11-2.3.0.jar
设置完成之后,首先在集群上提交,然后点击IDEA的调试按钮,启动Application。