大数据存储元数据节点
NameNode 是什么?
记住“哪个文件的哪个块在哪几台机器上”,本身不存任何数据
类比:图书馆的检索台,只告诉你书在几号书架,书不在它手里
它到底存了什么
两样东西:命名空间(目录树、文件属性、权限)和块映射(每个块对应哪几个 DataNode)。这些信息全部放在内存里,所以 NameNode 的堆大小直接决定集群能存多少个块。
持久化靠 fsimage(某一时刻的内存快照)+ edits log(之后的每次改动)。启动时把 edits 回放到 fsimage 上,就还原出内存状态。
为什么是单点
HDFS 早期只有一个 NameNode,它挂了整个集群就没法读写(数据还在,但没人知道在哪)。现在标准做法是 NameNode HA:Active + Standby 两台,通过 JournalNode 共享 edits log,配合 ZooKeeper 做自动主备切换。
即便如此,NameNode 仍是“内存受限”的组件:1000 万个小文件大约需要 3GB 堆,这也是为什么小文件问题这么致命。
SecondaryNameNode 不是备份
它的名字有误导性:它不是 Standby,只负责定期合并 fsimage 和 edits,减轻主节点启动压力。真正的备份要用 HA 或 NameNode 快照。