zeppelin源码分析(7)——interpreter调试
前⾯提到了interpreter是以单独的process启动的,想要debug interpreter,需要设置启动interpreter进程的jvm以debug⽅式启动,然后让IDE进⾏remote debug,具体步骤如下:
1)      在bin/interpreter.sh脚本中JAVA_INTP_OPTS变量中加⼊如下参数:
JAVA_INTP_OPTS+=" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=`expr ${PORT} + 1`-
Dzeppelin.log.file=${ZEPPELIN_LOGFILE}"
红⾊部分保证启动interpreter的jvm以debug⽅式启动,监听的端⼝号⽐RemoteInterpreterServer process监听的端⼝号+1(采
⽤`expr${PORT} + 1`)这⾥不能写成固定的端⼝,因为每种interpreter都会启动⼀个独⽴的process,该process监听的socket端⼝是zeppelin在运⾏时随机获取⼀个可⽤的端⼝(没有被占⽤的端⼝)。如果写成固定的端⼝,那么每种interpreter process在进⾏remote debug的时候,端⼝就会冲突。
2)      启动ZeppelinServer的调试,可以直接run,不⽤以debug⽅式启动。
idea debug
4)      通过ps –ef|grep interpreter来查RemoteInterpreterServer process启动的参数,可以看到-
agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=58679类似的输出,表明该jvm在58679端⼝上⽀持remote debug。
在SparkInterpreter.java中的重点位置设置断点,如在⽅法
open()和interpret(String line, InterpreterContext context)
⾸⾏设置断点。
5)      在IDE,以Idea为例:创建Remote Run/Debug Configuration,填⼊端⼝号58679
即可启动remote debug。
需要注意的是,由于hello world代码简短,可能在你在IDE中启动Remote debug时该Interpreter已经执⾏完了。再次点击执⾏该paragraph即可命中SparkInterpreter中的断点。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。