Flink 調(diào)試 | Flink On Yarn 遠(yuǎn)程調(diào)試
大家好,我是 JasonLee。
前幾天有小伙伴問我,我寫的 Flink 代碼是提交到 yarn 上去運(yùn)行的,那我怎么能遠(yuǎn)程調(diào)試代碼呢?在本地調(diào)試代碼大家都非常熟悉了,直接在 IDEA 里面打個(gè)斷點(diǎn),然后以 debug 模式啟動(dòng)就可以一步步調(diào)試代碼了。其實(shí) Flink on yarn 遠(yuǎn)程調(diào)試也不復(fù)雜,只需要簡單的配置即可。
集群配置(flink-conf.yaml)
在 flink-conf.yaml 配置文件中添加下面三行配置
#?遠(yuǎn)程調(diào)試
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:是主動(dòng)連接調(diào)試器還是作為服務(wù)器等待調(diào)試器連接
suspend:是否在啟動(dòng) JVM 時(shí)就暫停,并等待調(diào)試器連接(建議設(shè)置成 y)
address:地址和端口,地址可以省略,兩者用冒號分隔
這里你可以選擇只設(shè)置 client,jobmanager,taskmanager 其中一個(gè),也可以同時(shí)設(shè)置 client,jobmanager,taskmanager,因?yàn)?JM 和 TM 可能會(huì)在同一臺機(jī)器上面可能會(huì)發(fā)生沖突,所以就把 JM 和 TM 分開單獨(dú)設(shè)置,當(dāng)然調(diào)試的時(shí)候也可以先從 client -> jobmanager -> taskmanager 整個(gè)啟動(dòng)流程。
Client 端的入口類是:org.apache.flink.client.cli.CliFrontend
JM 的入口是:org.apache.flink.runtime.entrypoint.ClusterEntrypoint
TM 的入口是:org.apache.flink.runtime.taskexecutor.TaskManagerRunner
IDEA 配置

按照上面的配置添加一個(gè) remote JVM debug,注意端口需要和 flink-conf.yaml 配置文件里面的保持一致。
提交 Flink 任務(wù)
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
注意要先把任務(wù)提交到 yarn 上。然后在 idea 里面遠(yuǎn)程調(diào)試。比如我想要調(diào)試客戶端的解析流程,只需要在 CliFrontend 構(gòu)造方法里面設(shè)置了一個(gè)斷點(diǎn)就行了。

