NameNode工作机制
NameNode是HDFS的核心,NameNode存储了文件的元数据,需要根据元数据来找到文件所在的DataNode节点,NameNode中的数据肯定不能只存在内存,否则如果挂掉在启动就什么都没了,但是如果将元数据放在磁盘,随机访问就会非常慢,所以就需要进行元数据持久化。
元数据持久化
元数据存在内存,在磁盘中是有备份的元数据FsImage,但是数据量如此大的元数据,在修改时内存中的数据更新,带动FsImage数据更新,依然会导致数据更新过慢,引入Edits文件来只进行追加操作(不管元数据是添加还是修改,都是进行追加操作),这样就可以将FsImage和Edits合并来合成内存中的元数据。
Edits文件会随着时间变得越来越大,最后合并的效率会变低,需要定期地进行两个文件的合并,这个合并操作就是由Secondary NameNode来完成的
FsImages
fsimage文件中存储了文件系统中所有目录和文件inode的序列化形式,包括了文件的复制等级、修改和访问时间、访问权限、块大小以及组成文件的块。其中并没有记录块存储在哪个DataNode,是在DataNode加入集群后,DataNode将自己所包含的块列表告知给NameNode
可以在NameNode的数据目录下找到fsimage文件
1 | hdfs oiv -p 转换格式 -i 输入(即fsimage镜像文件) -o 输出 |
Edits
可以在NameNode的数据目录下找到edits文件
1 | hdfs oev -p 转换格式 -i 输入(即fsimage镜像文件) -o 输出 |
集群启动
在集群启动的时候先将fsimage文件加载到内存中,在执行edits中的各项操作
配置
既然是定期进行合并的,那么什么时候会触发合并呢,根据checkPoint进行配置,在hdfs-site.xml中配置
1 | <!-- 配置Secondary NameNode多久合并一次 --> |