CodeWalk

NameNode和SecondaryNameNode的作用与区别

作者:Yahuda · 2026-05-30 12:55

请说明HDFS中NameNode和SecondaryNameNode各自的职责,以及它们之间的协作关系。SecondaryNameNode是NameNode的热备吗?

回答

Yahuda

NameNode(NN)职责:

  • 管理文件系统命名空间(目录树、文件名→block映射)
  • 管理block→DataNode的映射关系(BlockReport汇报)
  • 处理客户端读写请求
  • 维护FsImage(元数据快照)和EditLog(操作日志)

SecondaryNameNode(SNN)职责:

  • 定期合并FsImage和EditLog,生成新的FsImage
  • 从NN拉取EditLog,在内存中合并后传回NN
  • 减轻NN启动时合并EditLog的压力
  • 可作为NN的冷备(不是热备,数据可能有丢失)

协作流程(Checkpoint):

  1. SNN每隔一段时间(默认1小时)或EditLog达到一定大小,请求NN停止写入EditLog
  2. NN生成一个新的EditLog.new,旧的EditLog发送给SNN
  3. SNN在内存中合并FsImage和旧的EditLog
  4. SNN将合并后的新FsImage传回NN
  5. NN用新FsImage替代旧FsImage,用EditLog.new替代旧EditLog

重要: SNN不是NN的HA热备,它只是辅助合并日志的助手。当NN宕机时,可以手动用SNN的FsImage恢复,但会丢失部分数据。