NameNode和SecondaryNameNode的作用与区别
请说明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):
- SNN每隔一段时间(默认1小时)或EditLog达到一定大小,请求NN停止写入EditLog
- NN生成一个新的EditLog.new,旧的EditLog发送给SNN
- SNN在内存中合并FsImage和旧的EditLog
- SNN将合并后的新FsImage传回NN
- NN用新FsImage替代旧FsImage,用EditLog.new替代旧EditLog
重要: SNN不是NN的HA热备,它只是辅助合并日志的助手。当NN宕机时,可以手动用SNN的FsImage恢复,但会丢失部分数据。