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在哪里?的主要内容,如果未能解决你的问题,请参考以下文章