命名空间图像和编辑日志

时间:2014-11-15 06:16:34

标签: hadoop hdfs hadoop2

Namenodes和Datanodes 主题下的书" Hadoop The Definitive Guide "中,提到:

  

namenode管理文件系统命名空间。它维持着   文件系统树和所有文件和目录的元数据   那个树。此信息将永久存储在本地磁盘中   两个文件的形式:命名空间图像和编辑日志。

     

辅助namenode,尽管它的名称不作为namenode。   它的主要作用是定期将命名空间映像与   编辑日志以防止编辑日志变得太大。

我对这些文件 namespace 编辑日志感到困惑。

命名空间图像用于存储元数据。

所以,我的问题是

  1. 什么是修改日志?它的作用是什么?
  2. 你能解释一下这句话" 它的主要作用是定期将命名空间图像与编辑日志合并,以防止编辑日志成为 太大了。"?

1 个答案:

答案 0 :(得分:20)

  

任何人都可以解释一下编辑日志是什么?这个日志文件的作用是什么?

最初,当NameNode首次启动时,fsimage文件本身就是空的。当NameNode收到创建/更新/删除请求时,该请求首先记录到edits文件中,以便在edits文件中保留持久性后,还会进行内存更新。因为所有读取请求都是从元数据的内存中快照提供的。

  

它的主要作用是定期将命名空间图像与编辑日志合并,以防止编辑日志变得太大。

因此,您会看到edits文件在此时继续增长。现在,如果NameNode重新启动或由于某种原因关闭并重新启动,它没有元数据的内存表示,因此,它必须读取edits文件并在内存中重建快照,这可能需要同时基于edits文件大小。

由于edits本身是一个WAL(预写日志),所有事件必须一个接一个地写入(仅附加),文件中可能没有更新以防止随机磁盘搜索。

为了防止这种开销(或保持edits文件可管理),引入了SecondaryNameNode。 SNN的唯一目的是确保edits文件不会超出界限。因此,默认情况下,当checkpointing文件达到64MB或每隔一小时(始终是第一个)时,SNN会触发一个名为edits的进程。

检查点过程本身很简单,SNN告诉NN角色当前edits日志并创建一个名为edits.new的新编辑文件,SNN然后复制来自NN的fsimage和编辑文件开始将编辑文件中的事件应用于现有的fsimage文件(从NN带来),一旦完成,新的fsimage文件被发送回NN,NN用SNN发送的新fsimage替换现有的fsimage并重命名{{ 1}}到edits.new。 NN现在具有edits的当前版本,其中包含从fsimage文件应用的事件。

因此,如果在完成检查点后重新启动NameNode,NameNode必须只将edits加载到内存并仅应用来自fsimage日志的最新更新(在检查点之后填充)已经完成)以确保它具有更高效的命名空间的最新视图。