写点什么

HDFS NameNode 中的 FSImage 与 edits 详解

发布于: 2021 年 04 月 28 日

所有的元数据信息都保存在了 FsImage 与 Eidts 文件当中,这两个文件就记录了所有的数据的元数据信息,元数据信息的保存目录配置在了 hdfs-site.xml 当中


    <!--fsimage文件存储的路径-->    <property>                <name>dfs.namenode.name.dir</name>                <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas</value>        </property>        <!-- edits文件存储的路径 -->    <property>                <name>dfs.namenode.edits.dir</name>                <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits</value>      </property>
复制代码


​ 客户端对 hdfs 进行写文件时会首先被记录在 edits 文件中。


​ edits 修改时元数据也会更新。


​ 每次 hdfs 更新时 edits 先更新后客户端才会看到最新信息。


​ fsimage:是 namenode 中关于元数据的镜像,一般称为检查点。


​ 一般开始时对 namenode 的操作都放在 edits 中,为什么不放在 fsimage 中呢?


​ 因为 fsimage 是 namenode 的完整的镜像,内容很大,如果每次都加载到内存的话生成树状拓扑结构,这是非常耗内存和 CPU。


​ fsimage 内容包含了 namenode 管理下的所有 datanode 中文件及文件 block 及 block 所在的 datanode 的元数据信息。随着 edits 内容增大,就需要在一定时间点和 fsimage 合并。

1 FSimage 文件当中的文件信息查看

官方查看文档


http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.14.0/hadoop-project-dist/hadoop-hdfs/HdfsImageViewer.html


【使用命令 hdfs oiv】


cd  /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas/currenthdfs oiv -i fsimage_0000000000000000864 -p XML -o hello.xml
复制代码


2 edits 当中的文件信息查看

官方查看文档


http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.14.0/hadoop-project-dist/hadoop-hdfs/HdfsEditsViewer.html


【查看命令 hdfs oev】


cd  /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/editshdfs oev -i  edits_0000000000000000865-0000000000000000866 -o myedit.xml -p XML
复制代码

3 secondarynameNode 如何辅助管理 FSImage 与 Edits 文件

5.1) secnonaryNN通知NameNode切换editlog5.2) secondaryNN从NameNode中获得FSImage和editlog(通过http方式)5.3) secondaryNN将FSImage载入内存,然后开始合并editlog,合并之后成为新的fsimage5.4) secondaryNN将新的fsimage发回给NameNode5.5) NameNode用新的fsimage替换旧的fsimage
复制代码


用户头像

专注于大数据技术研究 2020.11.10 加入

运营公众号:五分钟学大数据。大数据领域原创技术号,深入大数据技术

评论

发布
暂无评论
HDFS NameNode中的FSImage与edits详解