use*_*591 8 hadoop hdfs hadoop2
从" Hadoop The Definitive Guide " 一书中,在Namenodes和Datanodes主题下,提到:
namenode管理文件系统命名空间.它维护文件系统树以及树中所有文件和目录的元数据.此信息以两个文件的形式持久存储在本地磁盘上:命名空间映像和编辑日志.
辅助namenode,尽管它的名称不作为namenode.它的主要作用是定期将命名空间映像与编辑日志合并,以防止编辑日志变得太大.
我对这些文件命名空间和编辑日志有些困惑.
命名空间图像用于存储元数据.
所以,我的问题是
Ash*_*ith 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日志中的最新更新(在检查点完成后填写)以确保它具有最新查看命名空间哪个更有效率.