导读:在学习或者使用各个大数据框架的时候,往往想对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
具体还是多实践吧~!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐