在“hadoop最终指南”一书中,在namenodes和datanodes主题下提到:
namenode管理文件系统名称空间。它维护文件系统树以及树中所有文件和目录的元数据。此信息以两个文件的形式永久存储在本地磁盘上:名称空间映像和编辑日志。
次要namenode,尽管它的名称不是namenode。它的主要作用是定期将名称空间映像与编辑日志合并,以防止编辑日志变得过大。
我对这些文件的名称空间和编辑日志有一些混淆。
命名空间映像用于存储元数据。
所以,我的问题是
什么是编辑日志?它的作用是什么?
您能解释一下“它的主要作用是定期将名称空间映像与编辑日志合并,以防止编辑日志变得过大”这句话吗?
1条答案
按热度按时间pieyvz9o1#
有人能告诉我什么是编辑日志吗?这个日志文件的作用是什么?
最初当namenode第一次启动
fsimage
文件本身将为空。当ever namenode收到create/update/delete请求时,该请求首先被记录到edits
耐久性文件曾经保存在edits
还进行了文件内存更新。因为所有读取请求都是从元数据的内存快照中提供的。它的主要作用是定期将名称空间映像与编辑日志合并,以防止编辑日志变得过大。
所以,你看到
edits
文件不断增长,在这一点上没有边界。现在,如果namenode被重新启动或者由于某种原因关闭并恢复,那么它就没有元数据的内存表示,因此它必须读取edits
文件并在内存中重建快照,这可能需要一段时间edits
文件大小。作为
edits
它本身是一个wal(写前日志)所有事件都必须一个接一个地写(仅附加),文件中不能有任何更新来防止随机磁盘查找。为了防止这种开销(或保持
edits
引入了secondarynamenode。snn的唯一目的是确保edits
文件未超出界限。因此,默认情况下,snn会触发一个称为checkpointing
什么时候edits
文件达到64mb或每一小时(以先到者为准)。检查点过程本身很简单,snn告诉nn它的当前角色
edits
记录并创建一个名为edits.new
,然后snn复制fsimage并从nn编辑文件,并开始将编辑文件中的事件应用于已存在的fsimage文件(从nn带来),完成后,新的fsimage文件将发送回nn,nn将现有的fsimage替换为snn发送的新文件,并重命名edits.new
至edits
. nn现在有一个fsimage
应用了来自edits
文件。因此,如果namenode在检查点完成后重新启动,namenode只需加载
fsimage
只应用最近的更新edits
日志(在检查点完成后被填充),以确保它具有更高效的命名空间的最新视图。