如何配置Job Manager的flink-conf.yml?Yarn集群配置疑问
问题答疑
1. 是否需要移除JobManager主机flink-conf.yml中的TaskManager相关配置?
是的,完全不需要保留taskmanager.host这类TaskManager专属配置,你的理解是正确的。
在YARN模式下,TaskManager由YARN的NodeManager根据资源调度逻辑启动,其专属配置(如taskmanager.host、taskmanager.numberOfTaskSlots等)要么通过所有节点统一的flink-conf.yml分发,要么在提交集群/作业时通过参数临时指定,JobManager节点的配置文件只需关注自身运行相关的参数(如jobmanager.rpc.address、jobmanager.memory.process.size)和集群通用配置(如YARN、HDFS地址)。
2. TaskManager相关配置的存放位置是否正确?
你的理解完全正确。taskmanager.host这类配置是TaskManager启动时用来绑定自身网络地址的,应该配置在所有会运行TaskManager的节点的flink-conf.yml中(实际生产中通常会通过配置同步工具让所有节点使用相同的flink-conf.yml),不需要单独在JobManager节点配置。
3. 能否在JobManager主机上定义多个TaskManager条目?
不能,也完全不需要这么做。YARN模式下,TaskManager的数量、运行节点由YARN资源调度系统管理,你只需要在启动集群或提交作业时指定TaskManager的数量、资源规格(如内存、slot数),如果需要约束TaskManager运行在特定节点,可以通过YARN的节点标签实现,无需手动定义每个TaskManager的主机信息。
Flink on YARN 集群搭建步骤(符合你的需求:1台JobManager节点 + 2台指定NodeManager节点运行TaskManager)
前置条件
- Hadoop YARN+HDFS集群已正常运行,所有节点网络互通,
HADOOP_HOME环境变量已全局配置 - 下载与Hadoop版本兼容的Flink安装包(如
flink-1.18.0-bin-scala_2.12.tgz),解压到所有节点的相同路径(如/opt/flink) - 所有节点已配置
JAVA_HOME,JDK版本推荐11
步骤1:统一配置flink-conf.yml(所有节点)
编辑所有节点的/opt/flink/conf/flink-conf.yml,添加以下核心配置:
# JobManager基础配置(指定你要运行JobManager的主机IP/主机名) jobmanager.rpc.address: your-jobmanager-host jobmanager.rpc.port: 6123 jobmanager.memory.process.size: 2048m # TaskManager基础配置 taskmanager.memory.process.size: 4096m taskmanager.numberOfTaskSlots: 4 # YARN与HDFS配置 yarn.application.name: Flink-Session-Cluster fs.defaultFS: hdfs://your-namenode-host:9000 yarn.resourcemanager.address: your-resourcemanager-host:8032 yarn.resourcemanager.scheduler.address: your-resourcemanager-host:8030
步骤2:配置YARN节点标签(约束TaskManager运行节点)
为了让TaskManager只在你指定的2台NodeManager节点上运行,需要给这两台节点打标签:
- 在YARN ResourceManager节点执行,创建标签:
yarn rmadmin -addToNodeLabels "flink-task-node=true"
- 给指定的两台NodeManager节点绑定标签:
yarn rmadmin -replaceLabelsOnNode "node-manager-1-host=flink-task-node" yarn rmadmin -replaceLabelsOnNode "node-manager-2-host=flink-task-node"
步骤3:启动Flink Session集群(在指定的JobManager主机执行)
在你选定的JobManager主机上,执行以下命令启动后台运行的Session集群:
cd /opt/flink ./bin/yarn-session.sh -d -yn 2 -yD yarn.node-labels.enabled=true -yD yarn.node-labels.node-expression="flink-task-node"
参数说明:
-d:后台运行集群-yn 2:启动2个TaskManager-yD yarn.node-labels.enabled=true:启用YARN节点标签功能-yD yarn.node-labels.node-expression="flink-task-node":指定仅在带有flink-task-node标签的节点启动TaskManager
步骤4:验证集群
- 访问Flink WebUI:打开浏览器输入
http://your-jobmanager-host:8081,查看TaskManager列表,确认数量为2且运行在指定的NodeManager节点上 - 提交测试作业验证:
./bin/flink run ./examples/batch/WordCount.jar --input hdfs:///input/test.txt --output hdfs:///output/wordcount-result
若作业正常完成并在HDFS输出目录生成结果,说明集群搭建成功
内容的提问来源于stack exchange,提问作者codenirvan

