Mac环境下提交Flink Job至YARN集群时连接ResourceManager失败求助
问题场景
在Mac环境中尝试将Flink任务提交到YARN集群,执行了以下操作:
- 下载包含YARN的Hadoop并更新类路径;
- 下载Flink 1.16.1并进入
/Users/vasu/flink-1.16.1/bin目录; - 执行提交命令:
./bin/flink run-application -t yarn-application \ -Djobmanager.memory.process.size=2048m \ -Dtaskmanager.memory.process.size=4096m \ ./examples/batch/WordCount.jar
程序日志显示持续尝试连接ResourceManager地址0.0.0.0:8032,无法成功建立连接,核心日志片段:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/vasu/flink-1.16.1/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/homebrew/Cellar/hadoop/3.3.4/libexec/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
2023-04-27 12:21:04,246 INFO org.apache.hadoop.yarn.client.DefaultNoHARMFailoverProxyProvider [] - 正在连接ResourceManager,地址为/0.0.0.0:8032
2023-04-27 12:21:06,464 INFO org.apache.hadoop.ipc.Client [] - 正在重试连接服务器:0.0.0.0/0.0.0.0:8032。已尝试0次;重试策略为RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
...(后续重复重试日志)
排查与解决步骤
1. 确认YARN ResourceManager是否正常运行
- 在Mac终端执行
jps命令,检查是否存在ResourceManager进程; - 如果进程未启动,执行
start-yarn.sh启动YARN集群(需确保Hadoop的hadoop-env.sh中已正确设置JAVA_HOME)。
2. 修正YARN配置中的ResourceManager地址
- 打开Hadoop配置目录下的
yarn-site.xml,检查yarn.resourcemanager.address配置项:<property> <name>yarn.resourcemanager.address</name> <value>localhost:8032</value> <!-- 替换为Mac可访问的实际地址,比如localhost或内网IP --> </property> - 默认的
0.0.0.0表示监听所有网卡,但Flink客户端需要明确的可连接地址,修改后重启YARN服务。
3. 验证ResourceManager端口的可达性
- 在终端执行
nc -zv localhost 8032或telnet localhost 8032,测试8032端口是否开放; - 如果端口不通,检查YARN端口配置是否被修改,或Mac防火墙是否拦截了该端口。
4. 确保Flink加载正确的Hadoop配置
- 在Flink的
conf/flink-conf.yaml中添加Hadoop配置路径:fs.hdfs.hadoopconf: /opt/homebrew/Cellar/hadoop/3.3.4/libexec/etc/hadoop - 或者通过环境变量指定:
export HADOOP_CONF_DIR=/path/to/hadoop/conf,确保Flink能读取到正确的YARN配置。
5. 解决SLF4J绑定冲突(可选,消除日志干扰)
- 日志中的SLF4J多绑定警告,可移除Flink或Hadoop中其中一个SLF4J实现包,比如删除Flink目录下的
log4j-slf4j-impl-2.17.1.jar,统一使用Hadoop的SLF4J绑定。
内容的提问来源于stack exchange,提问作者codenirv

