Name节点存储fsImage和编辑Log在哪里?

Posted

技术标签:

【中文标题】Name节点存储fsImage和编辑Log在哪里?【英文标题】:Where does Name node store fsImage and edit Log? 【发布时间】:2014-04-20 12:10:45 【问题描述】:

我是一名 java 程序员,正在学习 Hadoop。 我读到 HDFS 中的 Name 节点将其信息存储到两个文件中,即 fsImage 和 editLog。在启动的情况下,它会从磁盘读取这些数据并执行检查点操作。

但在很多地方,我也读到 Name Node 将数据存储在 RAM 中,这就是为什么 apache 建议使用具有高 RAM 的机器作为 Name Node 服务器。

请赐教。 它存储在 RAM 中的哪些数据以及存储 fsImage 和编辑 Log 的位置?

对不起,如果我问了什么明显的问题。

【问题讨论】:

【参考方案1】:

让我先回答

它在 RAM 中存储什么数据以及它在哪里存储 fsImage 和编辑日志?

在 RAM 中——文件到块和块到数据节点的映射。 在持久化存储中(包括编辑日志和 fsimage)——文件相关的元数据(权限、名称等)

关于 fsimage 和 editlog 的存储位置@mashuai 的回答很到位。

有关更详细的讨论,您可以阅读this

【讨论】:

【参考方案2】:

当namenode启动时,它从持久存储(磁盘)加载fsimage,它的位置由hdfs-site.xml中的属性dfs.name.dir(hadoop-1.x)或dfs.namenode.name.dir(hadoop-2.x)指定。 Fsimage 被加载到主内存中。此外,正如您在 namenode 启动期间询问的那样,它执行检查点操作。 Namenode 将 Fsimage 保存在 RAM 中,以便快速处理请求。

除了初始检查点外,后续检查点可以通过调整hdfs-site.xml中的以下参数来控制。

dfs.namenode.checkpoint.period       # in second 3600 Secs by default
dfs.namenode.checkpoint.txns         # No of namenode transactions

【讨论】:

【参考方案3】:

它将 fsimage 和 editlog 存储在 dfs.name.dir 中,它在 hdfs-site.xml 中。启动集群时,NameNode会将fsimage和editlog加载到内存中。

【讨论】:

【参考方案4】:

当名称节点启动时,它会进入安全模式。它从持久存储加载 FSImage 并重播编辑日志以创建 HDFS 存储的更新视图(文件到块映射)。然后它将这个更新的 FSImage 写入持久存储。现在名称节点等待来自数据节点的块报告。从块报告它创建块到数据节点映射。当名称节点收到一定阈值的块报告时,它会退出安全模式,并且名称节点可以开始服务客户端请求。每当客户端对元数据进行任何更改时,NameNode(NN) 首先在编辑日志段中写入随着事务 ID 增加的内容更改到持久存储(硬盘)。然后它会更新其 RAM 中的 FSImage。

【讨论】:

请先看这个how-to-answer 很好的解释 Gyanprakas。如果可以的话,您能否提供以上信息的参考?【参考方案5】:

Fsimage 和 editlog 存储在 dfs.name.dir 中,它在 hdfs-site.xml 中。 在集群启动期间,NameNode 会将 fsimage 和 editlog 加载到内存(RAM)中。

【讨论】:

以上是关于Name节点存储fsImage和编辑Log在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

阅读有关名称节点和检查点节点的信息。无法清楚地理解 FSImage 文件和编辑日志文件的内容是啥

namenode从哪里获取datanode的信息

HDFS:edit log & fsimage

HDFS镜像文件fsimage和编辑日志文件edits

HDFS:edit log & fsimage

fsimage 和 edit 日志文件存储在哪个文件夹或实际位置,以便 namenode 在启动期间读取和合并?