【Flink系列十】Flink作業提交過程的調試和診斷


報錯記錄

提交作業的時候,遇到一些坑,報錯具有迷惑性。

413 Request Entity Too Large. Try to raise [rest.client.max-content-length]

Caused by: org.apache.flink.runtime.rest.util.RestClientException: 413 Request Entity Too Large. Try to raise [rest.client.max-content-length]
	at org.apache.flink.runtime.rest.RestClient$ClientHandler.channelRead0(RestClient.java:565)
	... 31 more

分析

此問題調試了半天結果發現
問題不在rest.client.max-content-length
亦不在rest.server.max-content-length
也不是session-cluster沒有重啟。

因為本次 jobGraph 以及要上傳的jar,總計才6MB左右。

調試方法

經過探索,以及上一篇【Flink系列九】Flink 作業提交遇到的問題記錄以及原理內的自我啟發,
最終找到了調試Flink作業提交的方法。

調試JobManager或者TaskManager

在Flink的配置文件conf/flink-conf.yaml

env.java.opts.jobmanager: '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5123'
env.java.opts.taskmanager: '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5124'

※加到提交的命令行的最前:

JVM_ARGS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5125" /flink-1.13.0-cdh5.12.1-slankka/bin/flink run ...

那么在IDEA中,打開 JVM Remote Debug配置即可,填好IP和端口,打開Debug即可。

  • 作業提交過程會打印一行:
Listening for transport dt_socket at address: 5125

打印完畢后,立即連接即可。

結論

上述問題,經過Debug,沒有找到JobManager停留在對應斷點。但意外發現,Flink 提交過程中 RestClient的端口為8081,不符合服務器上的配置。

於是立即修改 flink-conf.yaml,

rest.bind-port: 8086-8090
rest.port: 8086

※這很重要,客戶端需要rest.port,Environment初始化的時候,才能生成正確的客戶端。

默認rest.port是8081,但是服務器的8081由其他服務所占用,也就是說上傳到別的服務了,不是上傳到Flink了

JobManager的端口,由上一條配置給出范圍,8086,即對應 rest.port。

特定場景下出現此錯誤

由於(其他需求導致)服務端和客戶端使用的配置文件不同,因此導致此差異,引發端口錯誤。並拋出 413 Request Entity Too Large錯誤,實在是具有迷惑性。

※重申解決方法,需要保證客戶端和服務端的rest.host以及rest.port是一樣的。
因此,Session-Cluster模式下,尤其要注意這一點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM