请阐述在 Apache Hadoop YARN 中实现任务高可用性的方法,并列举常见的解决方案。
考察说明
考查对 YARN 高可用性机制的理解,包括 ResourceManager 和 NodeManager 层面的容错方案。
回答思路
- 【回答框架 1】YARN 的高可用性主要针对 ResourceManager(RM),因为 RM 是整个集群的资源调度中心,一旦失效,整个集群的任务提交和资源分配都会中断。解决思路是采用主备架构,即 Active/Standby RM,通过共享存储或 Zookeeper 协调状态,实现故障自动切换。
- 【回答框架 2】常见的方案是配置 ResourceManager HA,使用 Zookeeper 存储 RM 的状态信息,包括应用列表和令牌等。Active RM 将状态更新到 Zookeeper,Standby RM 监听 Zookeeper,当 Active 失效时,Standby 通过 Zookeeper 选举成为新的 Active,从而实现自动故障转移。
- 【回答框架 3】对于 NodeManager(NM),其高可用性通常通过任务重试和容错机制实现。当 NM 失效时,其上运行的任务会被 RM 重新调度到其他节点。对于 ApplicationMaster(AM),可以启用 AM 重启机制,由 RM 重新启动 AM,并从上次保存的状态恢复任务进度。
- 【回答框架 4】此外,还可以通过配置 YARN 的恢复功能,使 RM 在重启后能够恢复之前的状态,包括已提交的应用和运行中的任务。这需要将 RM 的状态存储到文件系统或 Zookeeper,并定期保存。
- 【关键点 1】YARN HA 核心是 ResourceManager 的主备切换,使用 Zookeeper 实现故障检测和自动选举。
- 【关键点 2】NodeManager 故障通过任务重试和重新调度实现容错。
- 【关键点 3】ApplicationMaster 支持重启,从上次保存的状态恢复。
- 【关键点 4】RM 状态持久化到共享存储(如 Zookeeper、HDFS),支持重启恢复。
- 【关键点 5】开启 YARN 的自动故障切换需要配置 active-standby 和 Zookeeper 连接信息。
- 【易错点 1】仅配置 RM HA 并不能保证所有任务幂等,任务可能重复执行,需要应用层保证幂等性。
- 【易错点 2】状态存储的延迟和一致性可能影响切换时的性能和正确性,需要权衡。
- 【易错点 3】AM 重启可能丢失部分未保存的进度,导致任务回滚,需合理设置状态保存频率。