【问题标题】:HDFS and small files - part 2HDFS 和小文件 - 第 2 部分
【发布时间】:2017-12-11 13:25:55
【问题描述】:

这是参考问题:Small files and HDFS blocks 答案引用 Hadoop:权威指南:

与单个磁盘的文件系统不同,HDFS 中小于单个块的文件不会占用整个块的底层存储空间。

我完全同意这一点,因为根据我的理解,块只是 namenode 映射哪个文件在整个集群中的位置的一种方式。由于 HDFS 是对我们常规文件系统的抽象,因此如果块大小为 128MB,则 140 MB 不会占用 HDFS 上 256 MB 的空间,或者换句话说,块中的剩余空间不会被浪费。

但是,我在Hadoop Block size and file size issue 中偶然发现了另一个答案:

可用的块数量有限,具体取决于 HDFS 的容量。您正在浪费块,因为在使用所有实际存储容量之前您将用完它们。

这是否意味着如果我有 1280 MB 的 HDFS 存储并且我尝试加载 11 个大小为 1 MB 的文件(考虑到 128 MB 块大小和每个块 1 个复制因子),HDFS 会抛出有关存储的错误?

如果我在整个过程中假设有任何错误,请更正。谢谢!

【问题讨论】:

  • 你的理解是正确的。磁盘上使用的是 Linux 存储格式,因此 10 KB 的文件不会占用 256MB 的磁盘空间。正在创建 HDFS 块来管理未管理到磁盘空间的数据量和集群资源。

标签: hadoop hdfs


【解决方案1】:

没有。 HDFS 不会抛出错误,因为

  1. 1280 MB 的存储限制未用完。
  2. 11 个元条目不会跨越名称节点上的内存限制。

例如,假设我们在 namenode 上有 3GB 的可用内存。 Namenode 需要为每个文件、每个块存储元条目。每个条目大约需要。 150 字节。因此,您可以存储大约最大值。 100 万个文件,每个文件都有一个块。因此,即使您有更多的存储容量,如果您有多个小文件达到 namenode 的内存限制,您将无法充分利用它。

但是,问题中提到的具体示例未达到此内存限制。因此,不应该有任何错误。

考虑一下,在 namenode 中具有可用内存的假设场景只有 300 字节* 10。在这种情况下,它应该为存储第 11 个块的请求给出错误。

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多