2017-04-01 32 views
1

我读到了Hadoop的HDFS,并开始知道hadoop的目的是处理较小数量的较大文件,而不是大量的小文件。关于Hadoop的大小文件的元数据

原因是,如果有较大数量的小文件,则Namenode's内存很快就会被吃掉。我很难理解这个论点。

考虑以下情形:

1000小文件和128 MB的每一个都具有大小(HDFS块相同的块大小)。

所以,这意味着Namenode的内存中有1000个条目保存这些信息。

现在,请考虑以下情况:

一个单一的大文件,谁拥有128 MB * 1000块大小。

现在不会Namenode为这个BIG单个文件拥有1000个条目吗?

这个结论是否正确,在这两种情况下,Namenode在内存中的文件块信息都会有相同数量的条目?如果是这样,那么为什么hadoop对少量较大文件而不是大量小文件有效?

任何人都可以帮助理解这一点?

回答

1

在HDFS每个文件,目录和块在 表示为一个对象的名称节点的存储器中,其中的每一个占据〜150个字节

情况1:

Number of Files = 1000 
Number of Blocks per file = 1 
Total Number of Blocks = 1000 (Number of Files * Number of Blocks per file) 
Total number of objects in Namenode's namespace = 2000 (Number of Files + Total Number of Blocks) 
Total Namenode Memory Used = 2000 * 150 bytes 

情况2:

Number of Files = 1 
Number of Blocks per file = 1000 
Total Number of Blocks = 1000 (Number of Files * Number of Blocks per file) 
Total number of objects in Namenode's namespace = 1001 (Number of Files + Total Number of Blocks) 
Total Namenode Memory Used = 1001 * 150 bytes 

在这两种情况下,由数据所占据的总尺寸保持相同。但在第一种情况下,使用namenode内存的300KB,而在第二种情况下仅使用150.15KB

+0

感谢您的回复,信息来源是什么?你能否让我知道,以便我可以参考相同的材料? – CuriousMind

+1

TomWhite的Cloudera博客文章。请参阅[链接](http://blog.cloudera.com/blog/2009/02/the-small-files-problem/) – franklinsijo