导读:在学习或者使用各个大数据框架的时候,往往想对runtime层次的代码进行调试或者跟踪阅读,但其往往部署在其他机器上,因此需要进行远程调试。本文以Flink为例,介绍如何通过IDEA进行Flink的runtime层次的远程调试。
环境:
Flink1.4.2
IntelliJ IDEA
虚拟机模拟的Flink集群
先对Flink的作业提交过程进行简单介绍(以批处理为例):
用户写完的代码,会被转化为plan,之后plan会被优化成OptimizedPlan,并转化成JobGraph,得到JobGraph后,Client会将JobGraph提交给JobManager,由JobManager将JobGraph转化为ExecutionGraph,之后再ExecutionGraph中的各个Task部署到各个slave上,进行计算。过程为:
Plan–>OptimizedPlan–>JobGraph–>ExecutionGraph–>执行
其中Plan到生成JobGraph都是Client端完成的,之后则是JobManager和TaskManager完成的。
具体如下图所示:
接下来以调试JobManager为例,介绍详细步骤:
step1:
在flink/bin目录下的jobmanager.sh脚本中,添加:
export JVM_ARGS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
其中suspend=n用于设置是否阻塞,address用于设置端口。
step2:
通过bin/start-cluster.sh启动flink集群。
step3:
在IDEA中设置远程调试:
点击Run–>Edit Configuration–> + –>Remote完成远程调试的配置。
step4:
在JobManager.scala类中打上断点,并点击Debug(注意选择之前配置好的远程调试)。
点击后会出现如下界面,等待连接:
step5:
在集群中通过flink run进行任务的提交。
step6:
大功告成!
PS:由于runtime层经常会有多线程之类的,可能在打断点的时候,需要选择Thread模式,如下图:
具体还是多实践吧~!