Какое максимальное количество файлов разрешено в каталоге HDFS?

Какое максимальное количество файлов и каталогов разрешено в каталоге HDFS (hadoop)?

5 ответов

Решение

Блоки и файлы хранятся в HashMap. Таким образом, вы связаны с Integer.MAX_VALUE. Таким образом, каталог не имеет никаких ограничений, но вся файловая система.

В современных версиях Apache Hadoop различные ограничения HDFS контролируются свойствами конфигурации с помощью fs-limits в имени, которые имеют разумные значения по умолчанию. Этот вопрос специально задавался о количестве детей в каталоге. Это определяется dfs.namenode.fs-limits.max-directory-itemsи его значение по умолчанию 1048576,

Обратитесь к документации Apache Hadoop в hdfs-default.xml для получения полного списка 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. Обычно рекомендуется, чтобы пользователи не настраивали эти значения, за исключением очень необычных обстоятельств.

От http://blog.cloudera.com/blog/2009/02/the-small-files-problem/:

Каждый файл, каталог и блок в HDFS представлен как объект в памяти namenode, каждый из которых, как правило, занимает 150 байтов. Таким образом, 10 миллионов файлов, каждый из которых использует блок, будут использовать около 3 гигабайт памяти. Масштабирование намного выше этого уровня является проблемой современного оборудования. Конечно, миллиард файлов невозможен.

В этом вопросе конкретно упоминается HDFS, но связанный с этим вопрос заключается в том, сколько файлов вы можете хранить в кластере Hadoop.

Это имеет другой ответ, если вы используете файловую систему MapR. В этом случае миллиарды файлов могут храниться в кластере без проблем.

В HDFS максимальная длина имени файла составляет 255 байтов. Итак, высказывание об одном файловом объекте, занимающем только 150 байт, не является правильным или точным. при вычислении байтов для памяти, мы должны взять максимальное занятие одного объекта.

Другие вопросы по тегам