Hadoop Yarn ResourceManager HA配置无效问题求助
ResourceManager HA配置报错:"Invalid configuration! yarn.resourcemanager.hostname.rm2 or yarn.resourcemanager.address.rm2 needs to be set"
问题核心原因
该报错明确指出:在ResourceManager HA模式下,你配置的RM实例rm2缺少对应的主机名(yarn.resourcemanager.hostname.rm2)或地址(yarn.resourcemanager.address.rm2)配置。Hadoop要求为每个在yarn.resourcemanager.ha.rm-ids中声明的RM实例,必须指定这两个参数中的一个。
正确配置示例
1. 完整的yarn-site.xml配置片段
<configuration> <!-- 启用RM HA --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 集群标识 --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yarn-ha-cluster</value> </property> <!-- 声明RM实例ID --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 为每个RM实例配置主机名(适配Docker内部DNS解析,推荐) --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>rm1</value> <!-- 对应Docker Compose中rm1服务的名称/hostname --> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>rm2</value> <!-- 对应Docker Compose中rm2服务的名称/hostname --> </property> <!-- RM状态存储依赖ZK --> <property> <name>yarn.resourcemanager.zk-address</name> <value>zk1:2181,zk2:2181,zk3:2181</value> <!-- 你的ZK集群地址 --> </property> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <!-- 其他YARN基础配置 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
2. Docker Compose对应RM服务配置
确保RM服务的hostname或服务名与yarn-site.xml中的配置一致:
services: rm1: image: apache/hadoop:3.3.0 hostname: rm1 container_name: hadoop-rm1 volumes: - ./config/yarn-site.xml:/opt/hadoop/etc/hadoop/yarn-site.xml # 其他端口、环境变量配置 rm2: image: apache/hadoop:3.3.0 hostname: rm2 container_name: hadoop-rm2 volumes: - ./config/yarn-site.xml:/opt/hadoop/etc/hadoop/yarn-site.xml # 其他端口、环境变量配置
验证步骤
- 将修改后的
yarn-site.xml同步到所有Hadoop容器的$HADOOP_HOME/etc/hadoop目录下 - 重启两个ResourceManager容器:
docker-compose restart rm1 rm2 - 检查RM状态:
正常情况下会返回# 进入rm1容器执行 yarn rmadmin -getServiceState rm1 # 进入rm2容器执行 yarn rmadmin -getServiceState rm2ACTIVE和STANDBY两种状态。
内容的提问来源于stack exchange,提问作者Flydog98
相关产品推荐
相关产品推荐

