乐趣区

关于flink: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=5666
env.java.opts.jobmanager: -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
env.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 拉起来,走到本人代码地位就会主动跳到断点外面,而后就和在本地调试没什么区别了。

如果你感觉文章对你有帮忙, 麻烦点一下 在看 吧, 你的反对是我创作的最大能源.

退出移动版