定义
NameNode管理着整个HDFS文件系统的元数据。
从架构设计上看,元数据大致分成两个层次:
- Namespace管理层:负责管理文件系统中的树状目录结构以及文件与数据块的映射关系;
- 块管理层:负责管理文件系统中文件的物理块与实际存储位置的映射关系BlocksMap。
Namespace管理的元数据除内存常驻外,也会周期Flush到持久化设备上FsImage文件;BlocksMap元数据只在内存中存在;当NameNode发生重启,首先从持久化设备中读取FsImage构建Namespace,之后根据DataNode的汇报信息重新构造BlocksMap。这两部分数据结构是占据了NameNode大部分JVM Heap空间。
NameNode内存的组成
NameNode内存主要由Namespace、BlocksMap、NetworkTopology及其它部分组成
- Namespace:维护整个文件系统的目录树结构及目录树上的状态变化;
- BlockManager:维护整个文件系统中与数据块相关的信息及数据块的状态变化;
- NetworkTopology:维护机架拓扑及DataNode信息,机架感知的基础;
- 其它:
- LeaseManager:读写的互斥同步就是靠Lease实现,支持HDFS的Write-Once-Read-Many的核心数据结构;
- CacheManager:Hadoop 2.3.0引入的集中式缓存新特性,支持集中式缓存的管理,实现memory-locality提升读性能;
- SnapshotManager:Hadoop 2.1.0引入的Snapshot新特性,用于数据备份、回滚,以防止因用户误操作导致集群出现数据问题;
- DelegationTokenSecretManager:管理HDFS的安全访问;
另外还有临时数据信