HDFS官网翻译——HDFS 架构指南(四)
文件系统元数据的持久性
HDFS命名空间存储在NameNode结点中。NameNode使用Editlog记录文件系统元数据的每一次变更。Editlog是一个事务型日志。例如,HDFS创建新文件时会在Editlog文件中插入一条记录。类似地,文件副本数的变更也会引起在Editlog文件中记录一条日志。NameNode结点使用本地文件系统存储Editlog文件。FsImage文件中存储了文件系统命令空间,包含文件与文件系统属性的map块。FsImage作为NameNode结点本地的一个文件被存储。
NameNode将文件系统命名空间的镜像、文件块map存储在内存中。这个关键的元数据项被设计得非常紧凑,例如一个拥有4GB RAM的NameNode足以支持大量的文件和目录。当NameNode结点启动的时候,它从磁盘中读取FSImage和Editlog文件,将Editlog中的事件读取后执行,然后刷新FSImage到磁盘(其实就是先获取FsImage中NameNode的状态,然后逐一读取EditLog中文件事件记录一一执行,之后将最新的NameNode状态刷回到FSImage文件中)。之后将EditLog文件丢弃,因为该文件中记录的事件已经全部被使用了(记录在持久化文件FSImage中了)。上述过程就叫做CheckPoint。在当前的版本中,只有NameNode启动时才会出现一个checkpoint。将来的功能会支持间隔性的checkpoint。
DataNode结点将HDFS数据存储在本地文件系统中。DataNode不感知HDFS文件,而是将特定文件分割为多块HDFS数据块存入本地文件系统。DataNode文件不能存放在同一个目录,它使用启发式方法(笔者也不清楚具体是什么)来确定每个目录的最佳文件数量,并适当地创建子目录。在同一个目录中创建所有本地文件不是最佳选择,因为本地文件系统可能无法有效地支持单个目录中的大量文件。当DataNode启动时,它扫描本地文件系统,生成与每个本地文件对应的所有HDFS数据块的列表,并将这个报告发送给NameNode——Blockreport。
- 点赞
- 收藏
- 关注作者
评论(0)