問題描述
我們使用flink 1.12提交任務到yarn時,遇到個比較奇怪的問題,我們的提交命令如下:
flink-1.12.0/bin/flink run -ynm chenTest -t yarn-per-job -yqu da_team -c com.test.FlinkTest Flink-1.0-SNAPSHOT.jar
通過參數指定application名稱和yarn隊列后,我們發現任務在yarn上的名稱並不是-ynm
定義的,並且提交的隊列也不對。后面我們換成 -m 指定提交模式后就正常了。
-m 提交模式命令為:
flink-1.12.0/bin/flink run -ynm chenTest -m yarn-cluster -yqu da_team -c com.test.FlinkTest Flink-1.0-SNAPSHOT.jar
然后對比發現,在通過 -t 指定提交模式時,client的log中沒有打印傳入的yarn相關參數,而通過 -m 提交的則有。兩個對比可以看到少了yarn.application.name和yarn.application.queue兩項參數。
晚上單步調試了下client側的代碼,發現在CliFrontend類中選擇activeCommandLine時,返回的是GenericCLI,而 -m 提交時返回的是FlinkYarnSessionCli。然后在下面的getEffectiveConfiguration方法中調用Cli的toConfiguration方法時,GenericCLI的該方法中並未將yarn的配置加載進Configuration,所以最后client在啟動AppMaster時取到的yarn相關參數都是空。
所以我想問下我們遇到的這個情況是正常的嗎?還是說 -t 提交存在問題呢?
問題解答
flink1.12后所有的yarn相關的參數通過-D進行指定
例:-Dyarn.application.name=xxx 替代以前的 -ynm xxx
./flink run -t yarn-per-job -Dyarn.application.name=topspeed -Dyarn.application.queue=root.users.hue --detached ../examples/streaming/TopSpeedWindowing.jar
生效:
更多配置參考文檔:https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/config.html#yarn
ref:https://blog.csdn.net/qq_26502245/article/details/113365576