如何为不同项目将Apache Flink作业提交至对应YARN集群?
如何将Apache Flink作业提交到指定的独立YARN集群
我来帮你解决这个问题——要把不同的Flink作业提交到独立的YARN集群,核心就是让Flink客户端明确知道要连接哪个YARN的ResourceManager,下面是两种最常用的可行方案:
方案一:提交命令中直接指定YARN集群参数
这种方式适合临时提交或者作业配置差异不大的场景,直接在flink run命令里通过-D参数指定目标YARN集群的核心配置项:
- 提交作业到第一个YARN集群:
./bin/flink run -m yarn-cluster \ -Dyarn.resourcemanager.address=yarn-cluster1-rm:8032 \ -Dyarn.resourcemanager.webapp.address=yarn-cluster1-rm:8088 \ -Dyarn.application.queue=queue-for-job1 \ # 可选:指定作业使用的YARN队列 -c com.yourcompany.JobClass1 \ ./your-job-1.jar
- 提交作业到第二个YARN集群:
./bin/flink run -m yarn-cluster \ -Dyarn.resourcemanager.address=yarn-cluster2-rm:8032 \ -Dyarn.resourcemanager.webapp.address=yarn-cluster2-rm:8088 \ -Dyarn.application.queue=queue-for-job2 \ # 可选:指定作业使用的YARN队列 -c com.yourcompany.JobClass2 \ ./your-job-2.jar
关键参数说明:
yarn.resourcemanager.address:YARN ResourceManager的RPC地址(默认端口8032)yarn.resourcemanager.webapp.address:YARN ResourceManager的WebUI地址(默认端口8088)- 如果你的YARN集群有自定义端口或其他特殊配置,都可以通过
-D参数追加对应的YARN配置项
方案二:使用自定义配置目录管理不同YARN集群
如果需要长期维护多个YARN集群的提交配置,推荐为每个YARN集群单独准备Flink配置目录,这样更清晰且不易出错:
- 复制Flink默认配置目录,为每个YARN集群创建专属配置:
# 为YARN集群1创建配置目录 cp -r ./conf ./conf-yarn-cluster1 # 为YARN集群2创建配置目录 cp -r ./conf ./conf-yarn-cluster2
替换或修改每个配置目录中的YARN配置:
- 将对应YARN集群的
yarn-site.xml文件替换到conf-yarn-clusterX目录下 - 或者直接在
conf-yarn-clusterX/flink-conf.yaml中添加YARN相关配置,比如:yarn.resourcemanager.address: yarn-clusterX-rm:8032 yarn.resourcemanager.webapp.address: yarn-clusterX-rm:8088 yarn.application.queue: queue-for-clusterX
- 将对应YARN集群的
提交作业时指定对应配置目录:
# 提交到YARN集群1 ./bin/flink run -m yarn-cluster --configDir ./conf-yarn-cluster1 -c com.yourcompany.JobClass1 ./your-job-1.jar # 提交到YARN集群2 ./bin/flink run -m yarn-cluster --configDir ./conf-yarn-cluster2 -c com.yourcompany.JobClass2 ./your-job-2.jar
额外注意事项
- 确保Flink客户端所在服务器能访问目标YARN集群的所有必要端口(RPC端口8032、WebUI端口8088、NodeManager端口8042等),避免网络不通导致提交失败
- 如果使用YARN Session模式,启动Session时同样需要指定对应YARN集群的参数或配置目录,后续作业提交到该Session的JobManager地址即可
- 可以把常用的提交命令写成shell脚本,比如
submit-job1.sh、submit-job2.sh,每次执行脚本就能快速提交,避免重复输入参数
内容的提问来源于stack exchange,提问作者SunSen




