You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在伪分布式模式下搭建YARN高可用性(HA)的技术咨询

嘿,作为搞过不少Hadoop测试环境的人,我太懂你这种找不到单节点YARN HA资料的痛苦了——毕竟大部分教程都是针对集群场景的。我结合Hadoop 2.x版本(包括你用的2.7.5和2.9)的特性,整理了一套单节点YARN HA的配置和测试方案,应该能帮到你:

单节点YARN HA核心配置步骤

首先要明确:单节点部署YARN HA的核心是在同一台机器上启动两个ResourceManager(RM)实例,通过ZooKeeper实现状态同步和自动故障转移,所有配置都要避免端口冲突。

1. core-site.xml 关键配置补充

你提到的etc/hadoop/core-site.xml需要添加ZooKeeper相关配置,因为YARN HA依赖ZK存储RM的状态信息:

<configuration>
    <!-- 单节点HDFS默认地址,保持你原有配置即可 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <!-- 单节点ZooKeeper地址,若你还没装ZK,建议用Hadoop自带的ZK组件 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>localhost:2181</value>
    </property>
    <!-- 调整ZK会话超时时间,避免单节点环境下频繁断开 -->
    <property>
        <name>ha.zookeeper.session-timeout.ms</name>
        <value>5000</value>
    </property>
</configuration>

2. yarn-site.xml 核心HA配置

这是单节点YARN HA的核心配置文件,重点是给两个RM分配不同端口、开启自动故障转移:

<configuration>
    <!-- 开启YARN HA模式 -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 自定义YARN集群ID,随便起名就行 -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarn-single-ha</value>
    </property>
    <!-- 定义两个RM的标识,比如rm1和rm2 -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>

    <!-- 配置rm1的所有端口,用默认端口即可 -->
    <property>
        <name>yarn.resourcemanager.address.rm1</name>
        <value>localhost:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>
        <value>localhost:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>localhost:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm1</name>
        <value>localhost:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>localhost:8088</value>
    </property>

    <!-- 配置rm2的端口,必须和rm1完全错开 -->
    <property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>localhost:8132</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>localhost:8130</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>localhost:8131</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm2</name>
        <value>localhost:8133</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>localhost:8188</value>
    </property>

    <!-- 指定ZK的连接地址,和core-site.xml保持一致 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>localhost:2181</value>
    </property>
    <!-- 开启自动故障转移 -->
    <property>
        <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!-- 启用嵌入式故障转移控制器(单节点环境推荐) -->
    <property>
        <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
        <value>true</value>
    </property>

    <!-- NodeManager基础配置,单节点保持默认即可 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>
部署与启动流程
  1. 初始化ZK目录:先确保ZK已启动(如果用Hadoop自带ZK,直接执行):

    hadoop zkfc -formatZK
    

    这一步只需要执行一次,用来在ZK中创建YARN HA的状态存储目录。

  2. 启动两个ResourceManager

    # 启动rm1
    yarn-daemon.sh start resourcemanager --config $HADOOP_CONF_DIR -Dyarn.resourcemanager.ha.id=rm1
    # 启动rm2
    yarn-daemon.sh start resourcemanager --config $HADOOP_CONF_DIR -Dyarn.resourcemanager.ha.id=rm2
    
  3. 启动NodeManager和故障转移控制器

    yarn-daemon.sh start nodemanager
    yarn-daemon.sh start zkfc
    
测试HA功能
  • 查看RM状态:执行以下命令,会看到一个RM处于ACTIVE状态,另一个处于STANDBY状态:
    yarn rmadmin -getServiceState rm1
    yarn rmadmin -getServiceState rm2
    
  • 模拟故障转移:手动杀掉ACTIVE状态的RM进程(比如kill -9 <RM_PID>),等待3-5秒后再次查看状态,另一个RM会自动切换为ACTIVE。
  • 任务连续性测试:提交一个MapReduce测试任务,比如计算圆周率:
    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar pi 2 5
    
    任务运行过程中杀掉ACTIVE RM,观察任务是否能继续执行,最终正常输出结果。
常见坑排查
  • 端口冲突:单节点上两个RM的所有端口必须完全错开,一旦有重复就会启动失败,检查yarn-site.xml里的端口配置。
  • ZK连接失败:查看YARN日志($HADOOP_HOME/logs/yarn-*-resourcemanager-*.log),确认ZK地址是否正确、ZK服务是否正常运行。
  • 权限问题:确保Hadoop运行用户对ZK目录有读写权限,初始化ZK时必须用hadoop zkfc -formatZK命令,不要手动创建目录。

内容的提问来源于stack exchange,提问作者R. Weber

火山引擎 最新活动