HDFS官网翻译——HDFS 架构指南(四)

举报
敏敏君主 发表于 2021/02/02 20:08:52 2021/02/02
【摘要】 文件系统元数据的持久性HDFS命名空间存储在NameNode结点中。NameNode使用Editlog记录文件系统元数据的每一次变更。Editlog是一个事务型日志。例如,HDFS创建新文件时会在Editlog文件中插入一条记录。类似地,文件副本数的变更也会引起在Editlog文件中记录一条日志。NameNode结点使用本地文件系统存储Editlog文件。FsImage文件中存储了文件系统命...

文件系统元数据的持久性

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。

【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容, 举报邮箱:cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200