远程Debug Spark
目录:
本文总结了怎么调试Spark的Master和Worker的源码,以及怎么调试自己的Spark程序
<h2 id="master">Debug Master</h2>
-
修改Master所在节点的$SPARK_HOME/conf/spark-env.sh文件,在文件中添加如下内容,意思是在运行Master的时候挂起.
#remote debug args export SPARK_MASTER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
-
启动Master
- 执行 $SPARK_HOME/sbin/start-master.sh
- jps 看到master被挂起
![image.png](https://img.haomeiwen.com/i1950473/98885fd7a35ace6d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
-
在IntelJ中创建一个Remote Application, 点击 Run -> Edit Configurations... -> + -> Remote -> 输入Name,Host,Port
image.png
如下图: -
在IntellJ中Master的main方法打上断点
-
双shift输入Master,注意选择和集群上版本一致的Spark,否者会连不上,并且会提示
image.png*Remote Debug Connected to the target VM, address: '192.168.33.21:5005', transport: 'socket'*
-
找到main方法,打上断点
image.png
-
-
选择运行Master,点击小虫子进行debug.
image.png
<h2 id="worker">Debug Worker</h2>
-
修改Worker所在节点的$SPARK_HOME/conf/spark-env.sh文件,在文件中添加如下内容,意思是在运行Worker的时候挂起.
#remote debug args export SPARK_WORKER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006"
-
启动Worker
-
启动worker要加上Master的地址
[hadoop@mini2 ~]$ $SPARK_HOME/sbin/start-slave.sh spark://mini1:7077
-
Worker会自动被挂起
-
-
在IntelJ中创建一个Remote Application,修改Name,Host,Port 如图:
image.png -
在IntellJ中Worker的main方法打上断点,注意选择和集群上版本一致的Spark
-
选择运行Worker,点击小虫子进行debug.
image.png
<h2 id="yourSparkApp">Debug YourSparkApp</h2>
-
提交任务之后,会自动监听端口
image.png[hadoop@mini1 ~]$ spark-submit --class cn.zhou.bigdata.SparkWrit2DB --master spark://mini1:7077 --driver-java-options "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5007" SparkLearning-1.0-SNAPSHOT.jar
-
创建一个Remote Application, 输入Name,Host,Port, 注意host是启动任务的节点的ip,port是提交任务时指定的5007
image.png
-
打好断点,点击小虫子Debug
image.png