这是参考问题:Small files and HDFS blocks其中答案引用了Hadoop:The Definitive Guide:
与单个磁盘的文件系统不同,HDFS中小于单个块的文件不会占用整个块的底层存储空间。
我完全同意这一点,因为根据我的理解,块只是namenode映射哪个文件位于整个集群中的一种方式。由于HDFS是我们常规文件系统的抽象,因此如果块大小为128MB,则140 MB将无法在HDFS上消耗256 MB空间,换句话说,块中的剩余空间不会被浪费。 / p>
但是,我在Hadoop Block size and file size issue中偶然发现了另一个答案:
可用的块数量有限,具体取决于HDFS的容量。在使用所有实际存储容量之前,您将耗尽块,因为您将耗尽它们。
这是否意味着如果我有1280 MB的HDFS存储空间,并且我尝试加载11个大小为1 MB的文件(考虑到128 MB块大小和每个块1个复制因子),HDFS会抛出有关存储的错误?
如果我在整个过程中出现任何问题,请更正。谢谢!
答案 0 :(得分:2)
没有。 HDFS不会抛出错误,因为
例如,假设我们在namenode上有3GB可用内存。 Namenode需要为每个文件存储元条目,每个块。每个条目大约需要。 150个字节。因此,您可以存储大致最大值。 100万个文件,每个文件有一个块。因此,即使您有更多的存储容量,如果您有多个小文件达到namenode的内存限制,您将无法完全利用它。
但是,问题中提到的具体示例未达到此内存限制。因此,不应该有任何错误。
考虑一下,在namenode中有可用内存的假设场景只有300字节* 10.在这种情况下,它应该为存储第11个块的请求提供错误。
参考文献: