来公司刚好一个月了,甚是吃惊的是,居然没有人用远端调试的方式运行spark程序,这在一直写Torch和Keras的人看来,简直无法想象,所以一顿操作如下终于弄好。
其中主要难点在于本机和服务器中间存在跳板机,需要建立ssh连接。
思路主要参考这两篇文章:
1.http://www.cloudchou.com/web/post-996.html,这是一篇java远程debug教程,但是java和scala基本一致,所以可以参考
2.https://www.bigendiandata.com/2016-08-26-How-to-debug-remote-spark-jobs-with-IntelliJ/,这是同一网段内的spark debug,可以借鉴
融合两篇文章,就得到如下教程:
0、首先配置本机idea
之所以设置5006是因为默认的5005被占用了,应该是服务器上有其他人也在remote debug。
# 0. set "localhost" and "5006" in idea debug configurations
"Host":localhost
"Port":5006
"Command line arguments for remote JVM":-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5006
1、连接跳板机
# 1. first, ssh to jump machine and set port as 5006
export JUMP_SERVER_USER=跳板机用户名
export SERVER_IP=你的服务器ip
export JUMP_SERVER_PORT=5044
export JUMP_SERVER_IP=跳板机ip
ssh -l $JUMP_SERVER_USER -L 5006:$SERVER_IP:5006 -p $JUMP_SERVER_PORT $JUMP_SERVER_IP -i ~/.ssh/你的rsa
# 如果没有rsa,去掉`-i`参数,下同
2、在跳板机内连接你的服务器
# 2. second, connect Server in jump machine
# the following command is running in jump machine
export USER_NAME=服务器用户名
export SERVER_IP=服务器ip
ssh -l $USER_NAME $SERVER_IP -p 5044 -i ~/.ssh/你的rsa
3、在你的服务器上运行spark,并设置debug和数据传输协议和端口等数据
就像正常提交spark程序一样~如下:
# 3. third, listening jvm program on port 5006 and run spark-submit
# the following command is running in server
export SPARK_SUBMIT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5006
spark-submit --packages "xxx" --files "xxx" --class xxx xxx.jar
如果终端出现这行:
Listening for transport dt_socket at address: 5006
那么就对了,现在可以去idea调试了~
对了,大概的调试原理如下:
|