从" Hadoop The Definitive Guide " 一书中,在Namenodes和Datanodes主题下,提到:
namenode管理文件系统命名空间.它维护文件系统树以及树中所有文件和目录的元数据.此信息以两个文件的形式持久存储在本地磁盘上:命名空间映像和编辑日志.
辅助namenode,尽管它的名称不作为namenode.它的主要作用是定期将命名空间映像与编辑日志合并,以防止编辑日志变得太大.
我对这些文件命名空间和编辑日志有些困惑.
命名空间图像用于存储元数据.
所以,我的问题是
什么是编辑日志?它的作用是什么?
你能否解释一下这句话:" 它的主要作用是定期将命名空间图像与编辑日志合并,以防止编辑日志变得太大."?
Ashrith.. 21
请任何人都可以解释一下编辑日志是什么?这个日志文件的作用是什么?
最初,当NameNode首次启动时,fsimage
文件本身将为空.当NameNode收到创建/更新/删除请求时,该请求首先被记录到edits
文件中以保持持久性,一旦在edits
文件中持久存在,也会进行内存中更新.因为所有读取请求都是从元数据的内存中快照提供的.
它的主要作用是定期将命名空间映像与编辑日志合并,以防止编辑日志变得太大.
所以,你看到edits
文件在这一点上不断增长.现在,如果NameNode重新启动或由于某种原因关闭并重新启动,它没有元数据的内存表示,因此,它必须读取edits
文件并在内存中重建快照,这可能需要一段时间基于该edits
文件尺寸.
由于edits
它本身是一个WAL(预写日志),所有事件必须一个接一个地写入(仅附加),文件中可能没有更新以防止随机磁盘搜索.
为了防止这种开销(或保持edits
文件可管理性),引入了SecondaryNameNode.SNN的唯一目的是确保edits
文件不会超出界限.因此,默认情况下,SNN会触发一个进程,该进程checkpointing
在edits
文件达到64MB或每隔一小时(始终为第一个)时调用.
检查点过程本身很简单,SNN告诉NN角色当前edits
日志并创建一个新的编辑文件edits.new
,SNN然后复制来自NN的fsimage和编辑文件并开始将编辑文件中的事件应用于已存在的fsimage文件(从NN带来),一旦完成,新的fsimage文件被发送回NN,NN用SNN发送的新fsimage替换现有的fsimage并重命名edits.new
为edits
.NN现在具有fsimage
从edits
文件应用事件的当前版本.
因此,如果在检查点完成后重新启动NameNode,NameNode必须只加载fsimage
内存并仅应用edits
日志中的最新更新(在检查点完成后填写)以确保它具有最新查看命名空间哪个更有效率.