10

HDFS (hadoop) 目录中允许的文件和目录的最大数量是多少?

4

5 回答 5

13

在现代 Apache Hadoop 版本中,各种 HDFS 限制由名称中的配置属性控制fs-limits,所有这些都具有合理的默认值。这个问题专门询问了目录中的孩子数量。它由 定义dfs.namenode.fs-limits.max-directory-items,其默认值为1048576

有关配置属性及其默认值的完整列表,请参阅hdfs-default.xml中的 Apache Hadoop 文档。fs-limits为方便起见,在此处复制粘贴:

<property>
  <name>dfs.namenode.fs-limits.max-component-length</name>
  <value>255</value>
  <description>Defines the maximum number of bytes in UTF-8 encoding in each
      component of a path.  A value of 0 will disable the check.</description>
</property>

<property>
  <name>dfs.namenode.fs-limits.max-directory-items</name>
  <value>1048576</value>
  <description>Defines the maximum number of items that a directory may
      contain. Cannot set the property to a value less than 1 or more than
      6400000.</description>
</property>

<property>
  <name>dfs.namenode.fs-limits.min-block-size</name>
  <value>1048576</value>
  <description>Minimum block size in bytes, enforced by the Namenode at create
      time. This prevents the accidental creation of files with tiny block
      sizes (and thus many blocks), which can degrade
      performance.</description>
</property>

<property>
    <name>dfs.namenode.fs-limits.max-blocks-per-file</name>
    <value>1048576</value>
    <description>Maximum number of blocks per file, enforced by the Namenode on
        write. This prevents the creation of extremely large files which can
        degrade performance.</description>
</property>

<property>
  <name>dfs.namenode.fs-limits.max-xattrs-per-inode</name>
  <value>32</value>
  <description>
    Maximum number of extended attributes per inode.
  </description>
</property>

<property>
  <name>dfs.namenode.fs-limits.max-xattr-size</name>
  <value>16384</value>
  <description>
    The maximum combined size of the name and value of an extended attribute
    in bytes. It should be larger than 0, and less than or equal to maximum
    size hard limit which is 32768.
  </description>
</property>

所有这些设置都使用 Apache Hadoop 社区决定的合理默认值。通常建议用户不要调整这些值,除非在非常特殊的情况下。

于 2015-12-29T18:32:11.020 回答
6

来自http://blog.cloudera.com/blog/2009/02/the-small-files-problem/

HDFS 中的每个文件、目录和块都表示为 namenode 内存中的一个对象,根据经验,每个对象占用 150 个字节。因此,1000 万个文件,每个文件使用一个块,将使用大约 3 GB 的内存。扩大到这个水平是当前硬件的一个问题。当然十亿个文件是不可行的。

于 2011-06-15T15:29:30.043 回答
4

块和文件存储在 HashMap 中。所以你被绑定到 Integer.MAX_VALUE。所以一个目录没有任何限制,而是整个文件系统。

于 2011-06-15T15:38:30.313 回答
1

这个问题特别提到了HDFS,但一个相关的问题是你可以在Hadoop集群上存储多少个文件。

如果您使用 MapR 的文件系统,那会有不同的答案。在这种情况下,数十亿个文件可以毫无问题地存储在集群上。

于 2013-02-05T22:06:57.740 回答
0

在 HDFS 中,最大文件名长度为 255 字节。因此,关于一个文件对象只占用 150 个字节的说法是不正确或不准确的。在计算内存字节时,我们应该取一个对象的最大占用。

于 2018-03-19T06:53:41.743 回答