1.概述
从NameNode涉及到的主要操作来讲,主要概念如下:
- 目录树:命名空间namespace
- 数据块管理
- 租约管理
- FSNamesystem:NameNode逻辑门面类
- NameNode HA下的启动与停止
从内存的角度来讲,分类如下:
- 元数据:
- namespace
- blockManager
- NetWorkTopology
- Other: 租约等
1. namespace
Namespace保存了目录树及每个目录/文件节点的属性。除在内存常驻外,这部分数据会定期flush到持久化设备上,生成一个新的FsImage文件。
在整个Namespace目录树中存在两种不同类型的INode数据结构:INodeDirectory和INodeFile.
2.blockManager
BlocksMap在NameNode内存空间占据很大比例,由BlockManager统一管理,相比Namespace,BlockManager管理的这部分数据要复杂的多。Namespace与BlockManager之间通过前面提到的INodeFile有序Blocks数组关联到一起。图5所示BlockManager管理的内存结构。
2. 类
1. INode
目录文件数据结构。
2. Feature
INode的其他属性:如配额等。
3. FSEditlog
editlog:实时更新。
1. transactionid
每一次客户端RPC对命名空间的修改,NN就会在editlog中发起一个新的transaction用于记录这次操作,会用唯一的transactionid来标识。
[hadoop@hadoop1 nn]$ tree
.
├── current
│ ├── edits_0000000000000000001-0000000000000000381
│ ├── edits_0000000000000000382-0000000000000010495
│ ├── edits_0000000000000010496-0000000000000010496
│ ├── edits_0000000000000010497-0000000000000010501
│ ├── edits_0000000000000010502-0000000000000028266
│ ├── edits_0000000000000028267-0000000000000028267
│ ├── edits_inprogress_0000000000000028268
│ ├── fsimage_0000000000000010495
│ ├── fsimage_0000000000000010495.md5
│ ├── fsimage_0000000000000028266
│ ├── fsimage_0000000000000028266.md5
│ ├── seen_txid
│ └── VERSION
└── in_use.lock
- edits_startid~endid: 两个id之间的所有事务。
- edits_inprogress: 正在处理的editlog。
2. FSEditlog状态机