hdfs和小文件-第2部分

holgip5t  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(523)

这是关于“小文件和hdfs块”的问题,答案引用了hadoop:权威指南:
与单个磁盘的文件系统不同,hdfs中小于单个块的文件不会占用整个块的底层存储。
我完全同意这一点,因为根据我的理解,块只是namenodeMap整个集群中哪个文件块的一种方式。而且,由于hdfs是对常规文件系统的抽象,如果块大小为128mb,那么140mb不可能在hdfs上消耗256mb的空间,换句话说,块中的剩余空间不会被浪费。
不过,我在hadoop块大小和文件大小问题中偶然发现了另一个答案,即:
根据hdfs的容量,可用的块数是有限的。您正在浪费块,因为在利用所有实际存储容量之前,它们将用完。
这是否意味着如果我有1280 mb的hdfs存储空间,并且我尝试加载11个文件,每个文件的大小为1 mb(考虑到128 mb的块大小和每个块1个复制因子),hdfs将抛出一个关于存储空间的错误?
如果我在整个过程中假设有任何错误,请更正。谢谢!

9rbhqvlz

9rbhqvlz1#

不。hdfs不会抛出错误,因为
1280 mb的存储限制尚未用尽。
11个元条目不会跨越namenode上的内存限制。
例如,假设namenode上有3gb的可用内存。namenode需要为每个文件、每个块存储元条目。每个条目大约占用150字节。因此,您最多可以存储大约100万个文件,每个文件都有一个块。因此,即使您有更多的存储容量,如果您有多个小文件达到namenode的内存限制,您也无法充分利用它。
但是,问题中提到的具体例子并没有达到这个记忆极限。因此,不应该有任何错误。
考虑一下,假设namenode中的可用内存只有300字节*10。在这种情况下,它应该为存储第11个块的请求提供一个错误。
参考文献:
http://blog.cloudera.com/blog/2009/02/the-small-files-problem/
https://www.mail-archive.com/core-user@hadoop.apache.org/msg02835.html

相关问题