報錯記錄
提交作業的時候,遇到一些坑,報錯具有迷惑性。
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'
調試flink run 這個提交過程
※加到提交的命令行的最前:
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模式下,尤其要注意這一點。