写点什么

Flink on yarn 远程调试源码

  • 2022 年 6 月 05 日
  • 本文字数:1101 字

    阅读完需:约 4 分钟

Flink on yarn 远程调试源码

Flink on yarn 远程调试源码

大家好,我是 JasonLee。


前几天有小伙伴问我,我写的 Flink 代码是提交到 yarn 上去运行的,那我怎么能远程调试代码呢?在本地调试代码大家都非常熟悉了,直接在 IDEA 里面打个断点,然后以 debug 模式启动就可以一步步调试代码了。其实 Flink on yarn 远程调试也不复杂,只需要简单的配置即可。

集群配置(flink-conf.yaml)

在 flink-conf.yaml 配置文件中添加下面三行配置


# 远程调试env.java.opts.client: -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5666env.java.opts.jobmanager: -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005env.java.opts.taskmanager: -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5006
复制代码


dt_socket:使用的通信方式


server:是主动连接调试器还是作为服务器等待调试器连接


suspend:是否在启动 JVM 时就暂停,并等待调试器连接(建议设置成 y)


address:地址和端口,地址可以省略,两者用冒号分隔


这里你可以选择只设置 client,jobmanager,taskmanager 其中一个,也可以同时设置 client,jobmanager,taskmanager,因为 JM 和 TM 可能会在同一台机器上面可能会发生冲突,所以就把 JM 和 TM 分开单独设置,当然调试的时候也可以先从 client -> jobmanager -> taskmanager 整个启动流程。


Client 端的入口类是:org.apache.flink.client.cli.CliFrontend


JM 的入口是:org.apache.flink.runtime.entrypoint.ClusterEntrypoint


TM 的入口是:org.apache.flink.runtime.taskexecutor.TaskManagerRunner

IDEA 配置


按照上面的配置添加一个 remote JVM debug,注意端口需要和 flink-conf.yaml 配置文件里面的保持一致。

提交 Flink 任务

flink run -d -m yarn-cluster -Dyarn.application.name=FlinkStreamingNewDemoHome -Dyarn.application.queue=flink -Dmetrics.reporter.promgateway.groupingKey="jobname=FlinkStreamingNewDemoHome" -Dmetrics.reporter.promgateway.jobName=FlinkStreamingNewDemoHome -c flink.stream.FlinkStreamingNewDemo -Denv.java.opts="-Dflink_job_name=FlinkStreamingNewDemoHome" /home/jason/bigdata/jar/flink-1.14.x-1.0-SNAPSHOT.jar
复制代码


注意要先把任务提交到 yarn 上。然后在 idea 里面远程调试。比如我想要调试客户端的解析流程,只需要在 CliFrontend 构造方法里面设置了一个断点就行了。



如果你只想调试自己的代码,就直接在相关的位置打个断点,等待 JM 和 TM 拉起来,走到自己代码位置就会自动跳到断点里面,然后就和在本地调试没什么区别了。


如果你觉得文章对你有帮助,麻烦点一下在看吧,你的支持是我创作的最大动力.

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2019.09.20 加入

还未添加个人简介

评论

发布
暂无评论
Flink on yarn 远程调试源码_flink_JasonLee实时计算_InfoQ写作社区