Filesystems HDFS目录中允许的最大文件数是多少?

Filesystems HDFS目录中允许的最大文件数是多少?,filesystems,hadoop,hdfs,Filesystems,Hadoop,Hdfs,HDFS(hadoop)目录中允许的最大文件和目录数是多少?来自: HDFS中的每个文件、目录和块都表示为namenode内存中的一个对象,根据经验,每个对象占用150字节。因此,1000万个文件,每个使用一个块,将使用大约3 GB的内存。扩展远远超出此级别是当前硬件的一个问题。当然,10亿个文件是不可行的。块和文件存储在HashMap中。因此,您被绑定到Integer.MAX_值。 因此目录没有任何限制,而是整个文件系统。这个问题特别提到HDFS,但一个相关的问题是Hadoop集群上可以存储多

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

来自:


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

块和文件存储在HashMap中。因此,您被绑定到Integer.MAX_值。
因此目录没有任何限制,而是整个文件系统。

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


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

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

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

<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>

dfs.namenode.fs-limits.max-component-length
255
定义每个文件中UTF-8编码的最大字节数
路径的组件。值为0将禁用该检查。
dfs.namenode.fs-limits.max-directory-items
1048576
定义目录可以包含的最大项数
包含。无法将属性设置为小于1或大于1的值
6400000
dfs.namenode.fs-limits.min-block-size
1048576
最小块大小(字节),由创建时的Namenode强制执行
时间这可以防止意外创建带有微小块的文件
大小(以及因此产生的许多块),这可能会降低
演出
dfs.namenode.fs-limits.max-blocks-per-file
1048576
每个文件的最大块数,由上的Namenode强制执行
写这可以防止创建非常大的文件,这些文件可能会
降低性能。
dfs.namenode.fs-limits.max-xattrs-per-inode
32
每个索引节点的最大扩展属性数。
dfs.namenode.fs-limits.max-xattr-size
16384
扩展属性的名称和值的最大组合大小
以字节为单位。它应该大于0,并且小于或等于最大值
大小硬限制为32768。

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

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

但是,由于s/w和h/w限制,框架可能无法真正扩展到该数量。我本以为作为MapR的CTO,我自己的答案足够权威。在任何情况下,请选中此处[或此处],它是否适用于/本身?假设我将属性设置为3,这是否意味着在/下不能有超过3个文件?