YARN的高可用原理

YARN 的高可用主要解决的是 ResourceManager (RM) 的单点故障问题,因为 RM 是整个集群的“大脑”,
它的宕机会导致整个集群无法接受新任务和资源调度。

高可用核心目标
当 Active ResourceManager 发生故障(机器宕机、进程崩溃、网络中断)时,系统能够自动、
快速地切换到 Standby ResourceManager,并恢复之前的集群状态,使得用户无感知或感知最小。

YARN HA 的核心实现机制
YARN 的高可用主要通过以下几个核心机制来实现:

1. Active/Standby 架构
多个 ResourceManager 实例:至少配置两个 RM 节点,一个处于 Active 状态,负责所有调度和决策;
另一个或多个处于 Standby 状态,随时准备接管。
故障转移:当 Active RM 故障时,通过一种选举机制,将一个 Standby RM 提升为新的 Active RM。

2. 状态存储与共享 - 最关键的部分
这是 HA 的核心。新的 Active RM 必须知道之前集群的状态(运行了哪些应用、每个应用的资源请求、每个节点的资源情况等),
否则无法无缝接管。YARN 通过将状态持久化到可靠的共享存储来实现这一点。主要有两种实现方式:
基于 ZooKeeper 的存储
基于 HDFS 的存储
目前,基于 ZooKeeper 的方案是主流和推荐的方式。

状态信息包括:
Application状态:所有已提交应用的信息、它们的 ApplicationMaster (AM) 信息等。
NodeManager状态:所有 NM 的注册信息、资源容量、当前使用情况等。

3. 自动故障检测与转移
通过 ZooKeeper 实现自动的故障检测和领导者选举。
基于 ZooKeeper 的 HA 详细工作流程

#步骤解析:
启动与注册:
多个 RM 启动时,都会尝试在 ZooKeeper 的一个特定路径(如 /yarn-leader-election)下创建一个临时节点。
由于 ZooKeeper 的保证,只有一个 RM 能创建成功。创建成功的 RM 将自己置为 Active 状态,而其他 RM 则成为 Standby,并监视 这个临时节点。

状态持久化(心跳):
Active RM 会定期将其内部的完整状态(主要是 RMStateStore 中的信息)序列化后写入 ZooKeeper 的一个持久化节点。
同时,Active RM 会不断更新它在 ZooKeeper 临时节点上的信息(相当于发送心跳),以表明自己还“活着”。

故障检测:
如果 Active RM 发生故障(进程崩溃、机器断电),它与 ZooKeeper 的会话会超时。
会话超时后,ZooKeeper 会自动删除该 RM 创建的临时节点。

自动故障转移:
所有 Standby RM 都监视着这个临时节点。一旦它们发现该节点被删除,就意识到当前的 Active RM 已经宕机。
它们会立即触发一个新的领导者选举过程,再次竞争创建那个临时节点。
第一个成功创建节点的 Standby RM 将胜出,并转变为新的 Active RM。

状态恢复:
新的 Active RM 从 ZooKeeper 的持久化节点中加载之前保存的集群状态信息。
它重建内存中的数据结构,恢复所有正在运行的应用和节点的状态。
NodeManagers 和 ApplicationMasters 会向 RM 发送心跳。当它们发现连接的主 RM 无响应后,
会根据配置列表中寻找新的 RM 地址,并向新的 Active RM 重新注册。AM 会汇报它正在运行的任务状态,NM 会汇报其容器状态。

关键组件与配置
1. ZooKeeper Quorum
必须部署一个 ZooKeeper 集群(通常至少 3 个节点),为 RM 提供可靠的协调服务。
在 yarn-site.xml 中配置:

xml
<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
</property>
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value> <!-- 例如两个RM,主机名分别为rm1和rm2 -->
</property>
<property>
  <name>yarn.resourcemanager.ha.id</name>
  <value>rm1</value> <!-- 在当前主机上配置它自己是rm1 -->
</property>
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>cluster-yarn</value> <!-- 集群ID -->
</property>
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>zk1:2181,zk2:2181,zk3:2181</value> <!-- ZK集群地址 -->
</property>

2. 故障转移代理
YARN 客户端和 NodeManager 需要知道所有 RM 的地址。它们会首先尝试连接 Active RM,如果失败,会自动尝试列表中的下一个。

xml
<property>
  <name>yarn.resourcemanager.address.rm1</name>
  <value>rm1-host:8032</value>
</property>
<property>
  <name>yarn.resourcemanager.address.rm2</name>
  <value>rm2-host:8032</value>
</property>

总结:YARN HA 的优势
消除单点故障:通过 Active/Standby 架构,确保了集群的持续可用性。
快速自动恢复:基于 ZooKeeper 的自动故障转移通常在几十秒内完成,远快于手动干预。
状态一致性:通过可靠的共享存储(ZK),确保了集群状态在故障转移后的一致性,运行中的应用程序不会因为 RM 切换而丢失。
对用户透明:对于大多数正在运行的任务和提交作业的客户端来说,故障转移过程是透明的或影响极小。
正是由于高可用机制的存在,YARN 才能在生产环境中担当起管理大型、关键性大数据集群的重任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值