Spark源码调试

在学习Spark源码或者开发过程中,往往需要远程调试Spark。下面将介绍如何在IDEA下对Spark源码进行远程调试。

调试前准备工作

  1. 下载需要调试的Spark对应的版本源码,并用make-distribution.sh编译方式对Spark源码进行编译(由于可能涉及到源码的修改问题,为便于修改后源码的编译和调试,选择该种方式进行编译,并利用编译生成的.tgz包安装Standalone模式的Spark)。

  2. 安装Spark集群(Standalone模式,为了减少工作量,此处Spark安装均在root用户下操作,并且Master和Worker都工作在同一台机器上)

    1. 解压.tgz包到指定目录

    2. 修改slaves文件,添加Worker节点IP

      Spark源码调试

    3. 修改spark-defaults.conf文件

      Spark源码调试

    4. 修改spark-env.sh文件(添加下列选项,注意SPARK_WORK_DIR对应的目录需要Spark启动前创建好)

      Spark源码调试

 

远程调试

  1. Master和Worker的调试

    Master和Worker的调试涉及到Spark集群和本地IDEA的设置

    1. 对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命令重新启动集群。

    2. IDEA设置:添加远程调试

      1. 分别打开Master.scala和Worker.scala文件,针对每个文件,点击图中选项右上角Spark源码调试,然后点击Edit Configurations...选项;

      2. 点击左边绿色“+”号,选择“Remote”选项,如图所示:

        Spark源码调试

        在弹出的tab页中,修改相关参数信息,如下图所示

        Spark源码调试

        设置完成后点击“Apply”和“OK”退出。

      3. 如下图所示,先在代码中打上断点,然后点击“debug”启动调试。(注意顺序:先打断点再启动调试)

        Spark源码调试

  2. 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

    Spark源码调试

    设置完成之后,首先在集群上提交,然后点击IDEA的调试按钮,启动Application。