FlinkFlink on yarn 远程调试

Posted 九师兄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FlinkFlink on yarn 远程调试相关的知识,希望对你有一定的参考价值。

1.概述

转载:Flink on yarn 远程调试

大家好,我是 JasonLee。

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

2.集群配置(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

3. IDEA 配置

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

4.提交 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 拉起来,走到自己代码位置就会自动跳到断点里面,然后就和在本地调试没什么区别了。

以上是关于FlinkFlink on yarn 远程调试的主要内容,如果未能解决你的问题,请参考以下文章

Flink on yarn 远程调试

spark远程debug之调试spark on yarn 程序

FlinkFlink on yarn 日志乱码问题

FlinkFlink on Yarn 翻译 使用 hdfs jar yarn.provided.lib.dirs

Flinkflink on yarn 并行度设置高导致任务失败

FlinkFlink on yarn 使用 pre-job模式 提交任务kerberos 认证 源码代码解读