hadoop-hdfs-secondaryNameNode 的作用与原理
SecondaryNameNode 是 Hadoop HDFS 架构中的一个关键组件,主要用于辅助 NameNode 管理元数据。尽管名称中包含“Secondary”,但它并不是 NameNode 的备份或热备节点。它的核心功能是定期合并 NameNode 的编辑日志(EditLog)和镜像文件(FsImage),减少 NameNode 重启时的恢复时间。
NameNode 在运行过程中会不断接收客户端的元数据变更请求,这些变更首先被记录到 EditLog 中。随着时间推移,EditLog 文件会变得非常大,导致 NameNode 重启时需要花费大量时间回放这些日志。SecondaryNameNode 通过定期从 NameNode 下载 EditLog 和 FsImage,在本地合并后生成新的 FsImage,并将其上传回 NameNode,从而避免 EditLog 无限增长。
SecondaryNameNode 的工作流程
-
检查点触发条件
SecondaryNameNode 根据两个条件触发检查点(Checkpoint)操作:- 时间间隔:默认每隔 3600 秒(1 小时)触发一次。
- 编辑日志大小:当 EditLog 的大小达到
dfs.namenode.checkpoint.txns配置的阈值(默认 100 万条事务)时触发。
-
下载元数据
SecondaryNameNode 通过 HTTP 协议从 NameNode 下载当前的 FsImage 和 EditLog 文件。 -
合并元数据
在本地将 FsImage 和 EditLog 加载到内存中,合并生成新的 FsImage,并验证其一致性。 -
上传新镜像
将合并后的新 FsImage 上传回 NameNode,替换旧的 FsImage,并清空已合并的 EditLog。
配置 SecondaryNameNode
以下是一个典型的 hdfs-site.xml 配置示例,用于调整 SecondaryNameNode 的行为:

被折叠的 条评论
为什么被折叠?



