gpt4 book ai didi

memory - Hadoop Namenode 元数据 - fsimage 和编辑日志

转载 作者:可可西里 更新时间:2023-11-01 14:19:21 25 4
gpt4 key购买 nike

我知道 fsimage 在启动时加载到内存中,并且出于性能原因,任何进一步的事务都会添加到编辑日志而不是 fsimage。

当namenode重启时,内存中的fsimage会被刷新。为了提高效率,secondary name node 会定期做一个 checkpoint 来更新 fsimage,这样 namenode 的恢复会更快。这些都很好。

但是我不明白的一点是,假设一个文件已经存在并且关于这个文件的信息在内存中的 fsimage 中。现在我将此文件移动到另一个位置,该位置在编辑日志中更新。现在,当我尝试列出旧文件路径时,它会提示它不存在或其他什么。

这是否意味着 namenode 也会查看编辑日志,这与内存中的 fsimage 的目的相矛盾?或者它如何知道文件位置已更改?

最佳答案

答案是查看编辑日志中的信息。如果编辑日志中的信息不可用当我们将新文件写入 hdfs 时,这个问题适用于用例。当您的名称节点正在运行时,如果您删除 fsimage 文件并尝试读取它能够读取的 hdfs 文件。

从正在运行的名称节点中删除 fsimage 文件不会导致读/写操作出现问题。当我们重启namenode时,会出现找不到镜像文件的错误。

让我试着给出更多的解释来帮助你。

只有在启动 hadoop 时才会查​​找 fsimage 文件,如果它不存在,则 namenode 不会出现并记录格式化 namenode。

hadoop format -namenode 命令创建 fsimage 文件(如果存在编辑日志)。在 namenode 启动文件元数据从编辑日志中获取(如果在编辑日志中找不到信息,则通过 fsimage 文件搜索)。所以 fsimage 只是作为上次保存信息的检查点。这也是辅助节点与编辑日志保持同步(1 小时/100 万次交易后)的原因之一,因此从最后一个检查点启动时不需要同步太多内容。

如果您打开安全模式(命令:hdfs dfsadmin -safemode enter)并使用 saveNamespace(命令:hdfs dfsadmin -saveNamespace),它将显示下面提到的日志消息。

2014-07-05 15:03:13,195 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Saving image file /data/hadoop-namenode-data-temp/current/fsimage.ckpt_0000000000000000169 using no compression
2014-07-05 15:03:13,205 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Image file /data/hadoop-namenode-data-temp/current/fsimage.ckpt_0000000000000000169 of size 288 bytes saved in 0 seconds.
2014-07-05 15:03:13,213 INFO org.apache.hadoop.hdfs.server.namenode.NNStorageRetentionManager: Going to retain 2 images with txid >= 0
2014-07-05 15:03:13,237 INFO org.apache.hadoop.hdfs.server.namenode.FSEditLog: Starting log segment at 170

关于memory - Hadoop Namenode 元数据 - fsimage 和编辑日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24288942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com