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如何知道哪些块对应于一个文件?的主要内容,如果未能解决你的问题,请参考以下文章