一、基础概念类

1. 为什么要做 NameNode HA?不做会有什么问题?

  • NameNode 是 HDFS 唯一元数据节点,单点故障(SPOF)
  • 一旦 NN 挂掉,整个 HDFS 不可用,业务中断。
  • HA 通过 Active/Standby 架构实现热备 + 自动切换,保证高可用。

2. 为什么要做 ResourceManager HA?

  • RM 是 YARN 全局资源调度中心,单点故障会导致:
    • 新任务无法提交
    • 运行中的任务无法调度
    • 集群资源不可控
  • RM HA 保证调度服务不间断。

二、NameNode HA 原理类

3. NameNode HA 架构包含哪些核心组件?

  • Active NameNode
  • Standby NameNode
  • JournalNode(JN)集群
  • Zookeeper 集群
  • ZKFC(ZK Failover Controller)

4. QJM 是什么?作用是什么?

  • QJM:Quorum Journal Manager,基于多数派机制的共享编辑日志方案。
  • 作用:
    • Active NN 写 edits 到 JN 集群
    • Standby NN 从 JN 拉取 edits 保持同步
    • 保证元数据一致性,替代 NFS,更安全可靠

5. ZKFC 是干什么的?

  • 监控 NameNode 健康状态
  • 向 ZK 注册、抢锁
  • 主备节点自动切换
  • 执行 fencing 隔离,防止脑裂

6. 什么是脑裂?如何解决?

  • 脑裂:同一时刻出现两个 Active NN,导致元数据错乱。
  • 解决:
    • ZK 分布式锁,只有一个能抢到主
    • fencing 机制(sshfence /shellfence)强制杀掉旧主

7. Standby NN 怎么保持和 Active NN 同步?

  1. Active 写 edits 到 JournalNode
  2. Standby 从 JN 实时拉取 edits
  3. Standby 定期 checkpoint 生成 fsimage
  4. 内存元数据与 Active 保持一致

8. NameNode HA 故障转移流程?

  1. Active NN 异常或宕机
  2. ZK 会话失效,释放锁
  3. 备机 ZKFC 感知,尝试抢锁
  4. fencing 旧 Active
  5. Standby 切换为 Active
  6. 客户端通过代理自动连接新主

三、ResourceManager HA 原理类

9. RM HA 架构有哪些组件?

  • Active RM
  • Standby RM
  • Zookeeper(选举 + 状态存储)
  • RMStateStore(状态持久化)
  • NodeManager

10. RMStateStore 作用是什么?有几种实现?

  • 存储 Application 状态、Container 信息、尝试信息等。
  • 实现方式:
    • FileSystem(不适合 HA)
    • ZKRMStateStore(生产推荐)
    • LevelDB

11. RM 挂了,正在跑的任务会挂吗?

  • 不会。
  • AppMaster 自己管理任务运行。
  • 新 RM 启动后从 StateStore 恢复状态,NM 重连,任务继续。

12. RM HA 切换流程?

  1. Active RM 宕机
  2. ZK 中主节点锁释放
  3. Standby RM 竞选为 Active
  4. 从 StateStore 恢复应用信息
  5. NM 自动重连新 RM
  6. 集群恢复调度能力

四、配置 & 生产实践类

13. NN HA 必须配置哪些关键配置项?

  • dfs.nameservices
  • dfs.ha.namenodes
  • dfs.namenode.shared.edits.dir(JN 地址)
  • dfs.client.failover.proxy.provider
  • dfs.ha.fencing.methods
  • dfs.ha.automatic-failover.enabled
  • ha.zookeeper.quorum

14. RM HA 关键配置?

  • yarn.resourcemanager.ha.enabled
  • yarn.resourcemanager.ha.rm-ids
  • yarn.resourcemanager.zk-address
  • yarn.resourcemanager.store.class
  • yarn.resourcemanager.recovery.enabled

15. 为什么 JournalNode、ZK 节点数要奇数?

  • 为了满足 ** 多数派(quorum)** 机制:
    • 3 节点 ≥2 台存活即可
    • 5 节点 ≥3 台存活即可
  • 避免脑裂、避免脑裂、保证选举有效。

16. 生产环境 NN HA 用 NFS 还是 QJM?

  • 必须 QJM。
  • NFS 有单点、性能差、锁不可靠。
  • QJM 高可靠、无单点、Hadoop 官方推荐。

五、面试必问:HA 模式下启动哪些服务?启动顺序?

1. 必须启动的服务

ZK 集群

  • zkServer.sh start(所有 ZK 节点)

NameNode HA 相关

  • JournalNode(JN)
  • NameNode(2 台:Active + Standby)
  • ZKFC(每台 NN 都起)
  • DataNode

ResourceManager HA 相关

  • ResourceManager(2 台:Active + Standby)
  • NodeManager

2. 标准启动顺序(面试高频)

  1. 启动 Zookeeper 集群
  2. 启动 JournalNode 集群
  3. 格式化 ZK(hdfs zkfc -formatZK)【仅第一次】
  4. 启动 HDFS:start-dfs.sh
    • 会自动启动 NN、DN、ZKFC
  5. 启动 YARN:start-yarn.sh
    • 会自动启动 RM、NM

3. 各角色进程总结(一句话背会)

  • NN HA:ZK + JN + NN + DN + ZKFC
  • RM HA:ZK + RM + NM

六、高频压轴面试题(面试官最爱)

17. NN HA 和 RM HA 的异同点?

相同:

  • 都是 Active/Standby 架构
  • 都依赖 ZK 做选举
  • 都支持自动故障转移

不同:

  • NN HA 依赖 JN 同步元数据
  • RM HA 依赖 StateStore 存储状态
  • NN 有 fencing,RM 一般不需要 fencing
  • NN 切换依赖 ZKFC,RM 自身集成 HA 模块

更多推荐