所有的元数据信息都保存在了 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/current
hdfs 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/edits
hdfs oev -i edits_0000000000000000865-0000000000000000866 -o myedit.xml -p XML
复制代码
3 secondarynameNode 如何辅助管理 FSImage 与 Edits 文件
5.1) secnonaryNN通知NameNode切换editlog
5.2) secondaryNN从NameNode中获得FSImage和editlog(通过http方式)
5.3) secondaryNN将FSImage载入内存,然后开始合并editlog,合并之后成为新的fsimage
5.4) secondaryNN将新的fsimage发回给NameNode
5.5) NameNode用新的fsimage替换旧的fsimage
复制代码
评论