spark源码远程调试开发

来源:互联网 发布:中产阶级焦虑 知乎 编辑:程序博客网 时间:2024/06/08 13:50

对于spark源码和spark执行过程有兴趣的同学,可以搭建一个spark的源码调试环境,来调试远程spark源码执行过程。

由于spark启动都是通过脚本设置一些环境变量执行指定类来启动的,所以在ide里面不能直接调试,需要预先启动一个spark执行代码,然后通过本地的代码进行远程调试。

1.环境

  • idea 2017
  • maven 3.3(可以将maven的镜像地址设置成国内的,不然编译很久或编译不成功)
  • jdk 1.8
  • spark 2.x
  • scala 2.11

2.下载源码并编译

spark源码导入ide之前要先编译,编译的时候要用到build包里面的脚本,由于脚本是shell,故在windows编译不了,可以在linux上编译好之后放到windows上。

git clone https://github.com/apache/spark.gitcd spark#切换到2.2版本git checkout branch-2.2./build/mvn -DskipTests clean package

这里写图片描述

编译好之后,在idea里面导入spark源码

3.在ide里面调试

这里以调试spark-sql为例。

首先启动spark-sql,在后面添加上远程调试的参数

sbin/start-thriftserver.sh --driver-java-options "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=10080"

dt_socket:使用的通信方式

server:是主动连接调试器还是作为服务器等待调试器连接

suspend:是否在启动JVM时就暂停,并等待调试器连接

address:地址和端口,地址可以省略,两者用冒号分隔
这里写图片描述
启动thriftservier后,日志里面显示这样一条记录,就表示客户端可以远程进行源码调试

在idea里面创建一个远程调试客户端,并设置源码进行调试。
这里写图片描述
这里写图片描述
这里写图片描述

点击OK,创建好远程调试客户端。

如下图点击debug,运行。
这里写图片描述

控制台显示已经连接到远程调试服务
这里写图片描述

打开PaseDriver并在如图所在行设置断点。
这个类相当于hive的driver类,负责编译sql语句和生成spark任务,在这里就可以查看sql语句是怎样转换成一步步的spark rdd转换。

到这里,用beeline连接thriftserver,并直接一个sql语句,如”show tables”
执行完之后,beeline的命令行就会挂起,这时在idea里面就可以调试执行过程了。
这里写图片描述

4.其它

例子里面的spark-sql相关可以参考
http://blog.csdn.net/dante_003/article/details/78657689
http://blog.csdn.net/dante_003/article/details/78652534