NameNode中的 元数据 与 内存
由于经常需要进行随机访问 nn 中的 元数据,还要响应客户请求,所以,元数据需要存放在内存中
缺点
如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了
解决
提出 FsImage
NameNode中的元数据 与 FsImage
NameNode内存中元数据 写入到磁盘中,就是 Fsimage文件(镜像文件)
HDFS格式化时都会产生一个空的fsimage文件
所在路径:hadoop1的 /program/hadoop-3.0.3/data/tmp/dfs/name/current/ 目录下
缺点
在内存中的元数据更新时,如果同时更新 FsImage,就会导致效率过低,但如果不更新,就会不一致,一旦NameNode节点断电,就会产生数据丢失。
解决
提出 Edits
NameNode中的元数据 与 Edits
Edits文件(编辑日志)作用:记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据)。在文件尾部进行追加,所以效率很高
当元数据有更新或者添加元数据时,修改内存中的元数据,并追加到 Edits 文件中。这样,一旦NameNode节点断电,可以通过 FsImage 和 Edits 的合并,恢复元数据
所在路径:hadoop1的 /program/hadoop-3.0.3/data/tmp/dfs/name/current/ 目录下
缺点
但是,如果长时间添加数据到 Edits 中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。
解决
通过 SecondaryNameNode 解决
详见:hadoop3.x:SecondaryNameNode(2NN)工作机制
参考文章:
https://cloud.tencent.com/developer/article/1887713
https://blog.csdn.net/he15936938636/article/details/95246440