在 Namenodes和Datanodes 主题下的书" Hadoop The Definitive Guide "中,提到:
namenode管理文件系统命名空间。它维持着 文件系统树和所有文件和目录的元数据 那个树。此信息将永久存储在本地磁盘中 两个文件的形式:命名空间图像和编辑日志。
辅助namenode,尽管它的名称不作为namenode。 它的主要作用是定期将命名空间映像与 编辑日志以防止编辑日志变得太大。
我对这些文件 namespace 和编辑日志感到困惑。
命名空间图像用于存储元数据。
所以,我的问题是
答案 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
日志的最新更新(在检查点之后填充)已经完成)以确保它具有更高效的命名空间的最新视图。