2011-06-15 14 views

Respuesta

4

Los bloques y archivos se almacenan en un HashMap. Por lo tanto, está obligado a Integer.MAX_VALUE. Por lo tanto, un directorio no tiene ninguna limitación, sino todo el FileSystem.

+0

Pero, el marco puede no escalarse realmente a ese número debido a las restricciones s/w y h/w. –

6

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

Cada archivo, directorio y bloque en HDFS se representa como un objeto en la memoria del NameNode, cada uno de los cuales ocupa 150 bytes, como una regla de oro. Entonces, 10 millones de archivos, cada uno usando un bloque, usarían aproximadamente 3 gigabytes de memoria. Ampliar mucho más allá de este nivel es un problema con el hardware actual. Ciertamente, mil millones de archivos no es factible.

1

Esta pregunta menciona específicamente HDFS, pero una pregunta relacionada es cuántos archivos puede almacenar en un clúster de Hadoop.

Tiene una respuesta diferente si utiliza el sistema de archivos MapR. En ese caso, miles de millones de archivos se pueden almacenar en el clúster sin ningún problema.

8

En las versiones modernas de Apache Hadoop, varios límites de HDFS están controlados por las propiedades de configuración con fs-limits en el nombre, todos los cuales tienen valores predeterminados razonables. Esta pregunta específicamente preguntó sobre la cantidad de niños en un directorio. Eso está definido por dfs.namenode.fs-limits.max-directory-items, y su valor predeterminado es 1048576.

Consulte la documentación de Apache Hadoop en hdfs-default.xml para obtener la lista completa de las propiedades de configuración fs-limits y sus valores predeterminados. Copiar y pegar aquí por conveniencia:

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

Todos estos ajustes, utilice los valores por defecto razonables según lo decidido por la comunidad Apache Hadoop. En general, se recomienda que los usuarios no ajusten estos valores, excepto en circunstancias muy inusuales.

+0

gracias por su respuesta detallada y clara –

Cuestiones relacionadas