对Flink集群进行远程调试

  • Post author:
  • Post category:其他



导读:在学习或者使用各个大数据框架的时候,往往想对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完成远程调试的配置。

远程调试1

远程调试2

远程调试3


step4:


在JobManager.scala类中打上断点,并点击Debug(注意选择之前配置好的远程调试)。

远程调试4

点击后会出现如下界面,等待连接:

远程调试5


step5:


在集群中通过flink run进行任务的提交。

远程调试6


step6:


大功告成!



远程调试7

PS:由于runtime层经常会有多线程之类的,可能在打断点的时候,需要选择Thread模式,如下图:

远程调试8

具体还是多实践吧~!



版权声明:本文为u013036495原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。