gpt4 book ai didi

hadoop - namenode从哪里获取datanode的信息

转载 作者:行者123 更新时间:2023-12-02 19:19:31 26 4
gpt4 key购买 nike

在 HDFS 上保存文件时,它会拆分文件并相应地存储并将信息存储在编辑日志中,一切都很好。

我的问题是:当我向namenode请求读取操作时,它会从哪里查看datanode的详细信息?
来自 fsimage 还是编辑日志?
如果是从 fsimage 看,每隔一小时会生成一个新的 fsimage。
如果我在那个时间间隔之前请求它,会发生什么?

最佳答案

让我们分解关于文件系统的每一位信息存储在 NameNode 上的位置。

文件系统命名空间(目录和文件的层次结构)完全存储在 NameNode 的内存中。没有磁盘缓存。一切都在内存中。 FsImage 仅用于在失败的情况下保持持久性。它在启动时只读。 EditLog 存储对 FsImage 的更改;同样,EditLog 在启动时是只读的。事件 NameNode 在正常操作期间永远不会读取 FsImage 或 EditLog。但是,BackupNodeStandby NameNode (取决于您的配置)将定期将新的 EditLog 条目与旧的 FsImage 组合以生成新的 FsImage。这样做是为了加快启动速度并减少磁盘数据结构的大小(如果没有进行压缩,EditLog 的大小将无限增长)。

上面讨论的命名空间包括从文件到包含在该文件中的 block 的映射。此信息保存在 FsImage/EditLog 中。但是,这些 block 的位置不会保留在 FsImage 中。此信息仅暂时存在于 NameNode 的内存中。在启动时,使用从所有 DataNode 接收到的 block 报告重建 block 的位置。每个 DataNode 本质上都告诉 NameNode,“我有 block ID AAA, BBB, CCC, ...”等等,NameNode 使用这些报告来构造所有 block 的位置。

为了简单地回答您的问题,当您从 NameNode 请求读取操作时,所有信息都是从内存中读取的。磁盘 I/O 仅在写入操作时执行,以将更改持久保存到 EditLog。

主要来源:HDFS Architecture Guide ;我也是 HDFS 核心代码的贡献者。

关于hadoop - namenode从哪里获取datanode的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48137695/

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