Hadoop:NameNode如何知道哪些块对应于一个文件?

Posted

技术标签:

【中文标题】Hadoop:NameNode如何知道哪些块对应于一个文件?【英文标题】:Hadoop: How does NameNode know which blocks correspond to a file? 【发布时间】:2014-09-24 21:14:56 【问题描述】:

hadoop 中的NameNode 不存储块信息。它保存在内存中,并在启动时 DataNodes 报告块信息。

如果我从本地复制一个文件到hdfs,它会被传输到hdfs,因为我可以用“hadoop fs -ls”看到。

我想知道 Hadoop 是如何知道哪个文件名对应于哪个块的。

【问题讨论】:

【参考方案1】:

NameNode 维护一个File System Image,它存储文件-> 块之间的映射。它还存储一个edit log,它维护对文件系统的任何编辑。 Secondary namenode定期从Namenode读取File System Image和Edit Log,并将它们组合起来为NameNode创建新的File System Image。

【讨论】:

这令人困惑。在文档中它说它不存储任何块信息,但是文件系统映像是从文件到块的映射?那么是块ID吗? 好的,这篇论文有一个很好的描述:hadoop.apache.org/docs/r0.18.0/hdfs_design.pdf 从上面的链接中查看第 9 页 - 第 6 节 The Persistence of File System Metadata。它解释了您感到困惑的概念。确实,NameNode 本身并不存储实际的块。块由数据节点存储。但是,NameNode 确实存储了 Files -> 块之间的映射。

以上是关于Hadoop:NameNode如何知道哪些块对应于一个文件?的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop源码学习之HDFS

Hadoop块校验和:也存储在namenode中?

求助Hadoop映射关系

hadoop中 namenode的持久化

Namenode对所有文件块的元数据存储

Hadoop基础原理