ResourceManager HA 配置

简介: 陆续的把Hadoop集群部署、HDFS的HA配置完成,把ResourceManager的HA配置好之后,Hadoop集群配置也算是完整了,可以满足小型中型生产环境Hadoop集群搭建的需要。如果真要搭建超大型的Hadoop集群,这些只能算是参考,还需要修改很多其他参数,使性能更好一些。

陆续的把Hadoop集群部署、HDFS的HA配置完成,把ResourceManager的HA配置好之后,Hadoop集群配置也算是完整了,可以满足小型中型生产环境Hadoop集群搭建的需要。如果真要搭建超大型的Hadoop集群,这些只能算是参考,还需要修改很多其他参数,使性能更好一些。


ResourceManager(RM)负责跟踪集群中资源使用情况,调度应用程序(比如MapReduce作业)。在Hadoop 2.4之前,ResourceManager存在单点故障,需要通过其他方式实现HA。官方给出的HA方案是Active/Standby两种状态ResourceManager的冗余方式,类似于HDFS的HA方案,也就是通过冗余消除单点故障。


HA架构

下图是ResourceManager HA方案架构图:

image.png



RM故障转移

ResourceManager HA是通过Active/Standby冗余架构实现的,在任何时间点,其中一个RM处于Active状态,其他RM处于Standby状态,Standby状态的RM就等着Active扑街或被撤。通过管理员命令或自动故障转移(需要开启自动故障转移配置),Standby就会转为Active状态,对外提供服务。


手动转换和故障转移:当未启用自动故障转移时,就需要管理员手动转换。首先将Active状态的RM转为Standby状态,然后将一个Standby状态的转为Active状态。这些操作都需要通过yarn rmadmin命令来操作。

自动故障转移:RM可以通过内嵌的基于Zookeeper的Active/Standby选择器决定哪个RM应该是Active状态的。当Active性能下降或无响应时,一个Standby状态的RM就被推举出来,转为Active状态接管。这里不需要像HDFS的HA配置需要一个单独的ZKFS守护进程辅助完成切换,因为这个功能已经内嵌在RM中。

客户端、ApplicationMaster和NodeManager在故障转移时,会轮训这些RM节点,知道找到Active状态的RM。如果Active节点性能下降,他们会重新轮训查找新的Active状态的RM。默认的轮训扩展是org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider。可以通过实现org.apache.hadoop.yarn.client.RMFailoverProxyProvider,并配置yarn.client.failover-proxy-provider来实现自己的逻辑。


恢复RM状态

当启用ResourceManger重启状态恢复之后,新的Active状态的RM会加载上一个RM状态,并根据状态尽可能的恢复之前的操作。应用程序会定期检查,以避免丢失数据。状态存储需要对Active状态和Standby状态的RM都可见。目前,RMStateStore有两个持久化实现,FileSystemRMStateStore和ZKRMStateStore。ZKRMStateStore隐式的只允许一个RM写入操作,可以没有单独的防护机制就能够避免闹裂问题,所以是HA集群推荐的状态存储方式。使用ZKRMStateStore时,建议不要在zookeeper集群上设置zookeeper.DigestAuthenticationProvider.superDigest配置,以确保zk管理员无法访问YARN的信息。


部署

配置

大多数的故障转移功能可以使用各种配置进行调整,下表是必须的和重要的参数项。完整的配置和默认值参见yarn-default.xml。关于状态存储参见ResourceManger状态存储。


配置项 描述

yarn.resourcemanager.zk-address zookeeper集群地址,用于状态存储和内部的leader选举

yarn.resourcemanager.ha.enabled 开启RM的HA

yarn.resourcemanager.ha.rm-ids RM逻辑id列表,以逗号分割,比如:rm1,rm2。

yarn.resourcemanager.hostname.[rm-id] 对于每个rm-id,需要给出hostname或ip地址。

yarn.resourcemanager.address.[rm-id] 对于每个rm-id,指定host:port地址,该配置会覆盖yarn.resourcemanager.hostname.rm-id。

yarn.resourcemanager.scheduler.address.[rm-id] 对于每个rm-id,指定ApplicationMasters申请资源的Scheduler的host:port地址,该配置会覆盖yarn.resourcemanager.hostname.rm-id。

yarn.resourcemanager.resource-tracker.address.[rm-id] 对于每个rm-id,指定NodeManager连接的host:port地址,该配置会覆盖yarn.resourcemanager.hostname.rm-id。

yarn.resourcemanager.admin.address.[rm-id] 对于每个rm-id,指定管理命令操作的host:port地址,该配置会覆盖yarn.resourcemanager.hostname.rm-id。

yarn.resourcemanager.webapp.address.[rm-id] 对于每个rm-id,指定RM的web应用host:port地址,如果设置yarn.http.policy是HTTPS_ONLY,就没必要设置该参数。该参数会覆盖yarn.resourcemanager.hostname.rm-id。

yarn.resourcemanager.webapp.https.address.[rm-id] 对于每个rm-id,指定RM的web应用host:port地址,如果设置yarn.http.policy是HTTP_ONLY,就没必要设置该参数。该参数会覆盖yarn.resourcemanager.hostname.rm-id。

yarn.resourcemanager.ha.id 用于识别HA的RM,可选配置。如果设置,需要确定所有的RM都有自己的ID。

yarn.resourcemanager.ha.automatic-failover.enabled 启用自动故障转移; 默认情况下,仅当HA被启用时才启用。

yarn.resourcemanager.ha.automatic-failover.embedded 启用自动故障转移时,使用嵌入式leader选举选择Active RM。 默认情况下,仅当HA被启用时才启用。

yarn.resourcemanager.cluster-id 集群标志,用于保证RM不会成为另一个集群的Active节点。

yarn.client.failover-proxy-provider 客户端使用,用于客户端、ApplicationMaster、NodeManager连接到新的Active的RM。

yarn.client.failover-max-attempts FailoverProxyProvider应该尝试的最大次数。

yarn.client.failover-sleep-base-ms 用于计算故障转移的休眠基准(单位是毫秒)。

yarn.client.failover-sleep-max-ms 故障转移休眠最长时间(单位是毫秒)。

yarn.client.failover-retries 尝试连接到RM的重试次数。

yarn.client.failover-retries-on-socket-timeouts 尝试连接到RM中可允许超时连接的次数。

配置示例(配置承接hadoop集群部署(yarn)中的,使用s107和s108作为RM双节点):


<!--Configurations for the state-store of ResourceManager-->
<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>
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>10.6.3.109:2181,10.6.3.110:2181,10.6.3.111:2181</value>
  <description>ZooKeeper服务的地址,多个地址使用逗号隔开</description>
</property>
<!--Configurations for HA of ResourceManager-->
<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
  <description>是否启用HA,默认false</description>
</property>
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
  <description>最少2个</description>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>s107</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>s108</value>
</property>
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>yarn-ha</value>
  <description>集群HA的id,用于在ZooKeeper上创建节点,区分使用同一个ZooKeeper集群的不同Hadoop集群</description>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>s107:8088</value>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>s108:8088</value>
</property>

启动

可以在s107上直接通过start-yarn.sh启动YARN,这样在s107上会启动ResourceManager,在其他节点上会启动NodeManager。


需要注意的是s108上不会自己启动ResourceManager,需要手动启动。通过命令yarn-daemon.sh start resourcemanager手动启动。


管理命令

对于YARN的管理前面又说到,用的命令是yarn rmadmin,可以检查RM的健康状态、转换Active/Standby状态等,需要使用yarn.resourcemanager.ha.rm-ids参数配置的RM的id作为参数。比如,查看RM状态:


$ yarn rmadmin -getServiceState rm1
active
$ yarn rmadmin -getServiceState rm2
standby

其他的命令可以通过yarn rmadmin -help获取。


Web管理页面

管理界面就是yarn.resourcemanager.webapp.address.[rm-id]配置的地址,如果访问的是Standby的RM地址,会自动重定向到Active状态的RM地址。About页面除外,可以访问About页面查看当前哪个节点是Active状态,哪个是Standby状态的。


参考文章

1. ResourceManager High Availability

目录
相关文章
|
SQL 分布式计算 资源调度
线上 hive on spark 作业执行超时问题排查案例分享
线上 hive on spark 作业执行超时问题排查案例分享
|
Oracle Java 关系型数据库
Oracle jdk 的国内下载镜像
Oracle jdk 的国内下载镜像
57828 0
|
分布式计算 安全 Hadoop
HDFS NAMENODE 安全模式
HDFS NAMENODE 安全模式
|
11月前
|
SQL JSON 数据可视化
基于 DIFY 的自动化数据分析实战
本文介绍如何使用DIFY搭建数据分析自动化流程,实现从输入需求到查询数据库、LLM分析再到可视化输出的全流程。基于经典的employees数据集和DIFY云端环境,通过LLM-SQL解析、SQL执行、LLM数据分析及ECharts可视化等模块,高效完成数据分析任务。此方案适用于人力资源分析、薪酬管理等数据密集型业务,显著提升效率并降低成本。
14920 16
|
存储 弹性计算 固态存储
阿里云服务器租用价格参考,2核8G、4核16G、8核32G最新收费标准
阿里云服务器2核8G、4核16G、8核32G配置租用价格参考,2024年阿里云产品再一次降价,降价之后2核8G配置按量收费最低收费标准为0.3375元/小时,按月租用标准收费标准为136.0元/1个月。4核16G配置的阿里云服务器按量收费标准最低为0.675元/小时,按月租用标准收费标准为272.0元/1个月。8核32G配置的阿里云服务器按量收费标准最低为1.35元/小时,按月租用标准收费标准为544.0元/1个月。云服务器实例规格的地域和实例规格不同,收费标准不一样,下面是2024年阿里云服务器2核8G、4核16G、8核32G配置的最新租用收费标准。
阿里云服务器租用价格参考,2核8G、4核16G、8核32G最新收费标准
|
消息中间件 JSON 负载均衡
kafka 动态扩容现有 topic 的分区数和副本数
kafka 动态扩容现有 topic 的分区数和副本数
3041 0
|
人工智能 搜索推荐 机器人
一款开源的宝藏聊天机器人Typebot
Typebot 是一个强大的开源聊天机器人框架,支持多种 AI 模型,包括 Claude 3.5 和 Dify.AI 助手,适用于客服、电商推荐等场景。它通过 Webhook 块实现与外部服务的交互,帮助开发者轻松创建和管理对话式 AI 应用。通过阿里云账号登录,即可快速创建和部署自己的聊天机器人。
|
存储 分布式计算 OLAP
Apache Paimon统一大数据湖存储底座
Apache Paimon,始于Flink Table Store,发展为独立的Apache顶级项目,专注流式数据湖存储。它提供统一存储底座,支持流、批、OLAP,优化了CDC入湖、流式链路构建和极速OLAP查询。Paimon社区快速增长,集成Flink、Spark等计算引擎,阿里巴巴在内部广泛应用,旨在打造统一湖存储,打通Serverless Flink、MaxCompute等,欢迎大家扫码参与体验阿里云上的 Flink+Paimon 的流批一体服务。
20376 8
Apache Paimon统一大数据湖存储底座