Какое максимальное количество файлов разрешено в каталоге 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 байт, не является правильным или точным. при вычислении байтов для памяти, мы должны взять максимальное занятие одного объекта.