Explicación detallada de los bloques HDFS

Explicación detallada de los bloques HDFS

Desventajas de los sistemas de archivos distribuidos tradicionales

Ahora imagine esta situación: hay cuatro archivos file1 de 0,5 TB, file2 de 1,2 TB, file3 de 50 GB y file4 de 100 GB; hay 7 servidores y hay 10 discos duros de 1 TB en cada servidor.

En términos de almacenamiento, podemos almacenar estos cuatro archivos en el mismo servidor (por supuesto, los archivos de más de 1 TB deben dividirse) y necesitamos usar un archivo para registrar la relación de mapeo de este almacenamiento. Los usuarios pueden encontrar los archivos correspondientes en el disco duro del nodo a través de esta relación de mapeo. A continuación se exponen las desventajas:

Primero, la carga no está balanceada.

Debido a que los tamaños de los archivos son inconsistentes, inevitablemente conducirá a una alta utilización del disco de algunos nodos y una baja utilización del disco de algunos nodos.

En segundo lugar, el problema del cuello de botella de la red.

Un archivo demasiado grande se almacena en un disco de nodo. Cuando hay procesamiento paralelo, cada subproceso necesita leer el contenido del archivo desde el disco de nodo, entonces habrá un cuello de botella en la red, que no es propicio para el procesamiento de datos distribuidos.

Bloques HDFS

HDFS, al igual que otros sistemas de archivos ordinarios, también introduce el concepto de bloque (Block), y el tamaño del bloque es fijo . Pero no es tan pequeño como un sistema de archivos común, pero se puede personalizar según las necesidades reales. Un bloque es la unidad de almacenamiento más pequeña del sistema HDFS. El tamaño predeterminado en hadoop2.0 es de 128 MB (el tamaño de bloque en hadoop1.x es de 64 M). Los archivos en HDFS se dividen en varios bloques y cada bloque se almacena como una unidad independiente. Se almacenan múltiples bloques en diferentes DataNodes, y el sistema HDFS se asegurará de que un bloque se almacene en un DataNode durante todo el proceso . Pero vale la pena señalar que si el tamaño de un determinado archivo o el último bloque del archivo no alcanza los 128M, no ocupará todo el espacio del bloque .

Echemos un vistazo a la idea de diseño de HDFS: tome la siguiente figura como ejemplo para explicar.

Tamaño de bloque HDFS

¿Por qué el tamaño de bloque en HDFS es mucho mayor que en los archivos tradicionales?

  1. El propósito es minimizar el tiempo de sobrecarga de direccionamiento.
    En la sobrecarga de E/S, el tiempo de direccionamiento del disco duro mecánico es la parte que consume más tiempo. Una vez que se encuentra el primer registro, la eficiencia de lectura secuencial restante es muy alta. Por lo tanto, la lectura y escritura de datos en unidades de bloques puede hacerse tanto como sea posible Reduzca el tiempo total de búsqueda del disco.
    La sobrecarga de direccionamiento de HDFS incluye no solo la sobrecarga de búsqueda de disco, sino también la sobrecarga de posicionamiento de bloques de datos.Cuando un cliente necesita acceder a un archivo, primero obtiene la lista de ubicación de los bloques de datos que componen el archivo del nodo de nombre y luego obtiene el almacenamiento real de acuerdo con la lista de ubicaciones. La ubicación del nodo de datos de cada bloque de datos. Finalmente, el nodo de datos encuentra el archivo correspondiente en el sistema de archivos local de Linux de acuerdo con la información del bloque de datos y devuelve los datos al cliente. está diseñado como un bloque relativamente grande, que puede reducir cada bloque. La sobrecarga total de direccionamiento de los datos en los datos reduce relativamente la sobrecarga de direccionamiento de los datos de la unidad. El tiempo de direccionamiento del
    disco es de aproximadamente 5 ~ 15 ms, con un promedio de 10 ms, y el tiempo mínimo de sobrecarga de direccionamiento generalmente se considera de 1 segundo. El uno por ciento es óptimo, por lo que la selección del tamaño del bloque se refiere a la velocidad de transmisión de 1 segundo. Por ejemplo, la velocidad de transmisión del disco duro en 2010 es de 100 M/s , entonces el tamaño de bloque se selecciona como 128M.
  2. Para ahorrar uso de memoria,
    los metadatos de un bloque son de unos 150 bytes. 100 millones de bloques, independientemente del tamaño, ocuparán alrededor de 20 G de memoria. Entonces, cuanto más grande es el bloque, más datos puede almacenar relativamente el clúster. Por lo tanto, se ha expuesto una deficiencia de HDFS, que no es adecuada para almacenar archivos pequeños.

¿Por qué HDFS no es adecuado para almacenar archivos pequeños?

  1. A partir de la capacidad de almacenamiento (memoria fija)
    , los archivos HDFS se almacenan en unidades de bloques, y si el tamaño del archivo es inferior a 128M, no ocupará el espacio de todo el bloque. Sin embargo, este bloque seguirá ocupando 150 bytes de metadatos en la memoria. Por lo tanto, bajo el mismo uso de memoria, una gran cantidad de archivos pequeños conducirá a una capacidad de almacenamiento insuficiente del clúster.
    Por ejemplo: la misma memoria de 128G puede almacenar hasta 920 millones de bloques. Si todos son archivos pequeños, como 1M, el tamaño de los datos almacenados en el clúster es de 920 millones*1M = 877 TB de datos. Pero si todos los archivos almacenados son 128 M, el tamaño de los datos almacenados en el clúster es 109,6 PB. Las capacidades de almacenamiento varían ampliamente.

  2. A partir del uso de la memoria (capacidad de almacenamiento fija),
    también se supone que almacena 1 M y 128 M de archivos, y también almacena 1 PB de datos. Si se trata de un almacenamiento de archivos pequeños de 1 M, el espacio de memoria ocupado es 1 PB/1 Mb 150 Byte = 150 G de memoria. Si el almacenamiento es de 128 M de almacenamiento de archivos, el espacio de memoria ocupado es 1 PB/128 M 150 Byte = 1,17 G de memoria ocupada. Se puede ver que para el mismo almacenamiento de 1 PB de datos, el almacenamiento de archivos pequeños ocupa más memoria que el almacenamiento de archivos grandes.

Ajustes de parámetros relacionados con bloques

当然块大小在默认配置文件hdfs-default.xml中有相关配置,我们可以在hdfs-site.xml中进行重置
<property>
    <name>dfs.blocksize</name>
    <value>134217728</value>
    <description>默认块大小,以字节为单位。可以使用以下后缀(不区分大小写):k,m,g,t,p,e以重新指定大小(例如128k, 512m, 1g等)</description>
</property>

<property>
    <name>dfs.namenode.fs-limits.min-block-size</name>
    <value>1048576</value>
    <description>以字节为单位的最小块大小,由Namenode在创建时强制执行时间。这可以防止意外创建带有小块的文件降低性能。</description>
</property>

<property>
    <name>dfs.namenode.fs-limits.max-blocks-per-file</name>
    <value>1048576</value>
    <description>每个文件的最大块数,由写入时的Namenode执行。这可以防止创建降低性能的超大文件</description>
</property>

ubicación de almacenamiento en bloque

En hdfs-site.xml, hemos configurado la siguiente propiedad, el valor de esta propiedad es la ubicación de almacenamiento del bloque en el sistema Linux.

<!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>

Ventajas de HDFS

  1. Alta tolerancia a fallas (la falla del hardware es la norma): los datos se guardan automáticamente en múltiples copias y se restaurarán automáticamente después de que se pierda la copia
  2. Adecuado para grandes conjuntos de datos: GB, TB o incluso datos a nivel de PB, la cantidad de archivos por encima de decenas de millones y la escala de más de 1,000 nodos.
  3. Acceso a datos: escriba una vez, lea varias veces; garantice la coherencia y la seguridad de los datos
  4. Barato de construir: se puede construir con máquinas baratas.
  5. Portabilidad a través de múltiples plataformas de hardware y software
  6. Eficiencia: Hadoop puede mover datos de forma dinámica entre nodos y garantizar el equilibrio dinámico de cada nodo, por lo que la velocidad de procesamiento es muy rápida.
  7. Alta confiabilidad: la capacidad de Hadoop para almacenar y procesar datos es confiable.

Desventajas de HDFS

  1. No apto para acceso a datos de baja latencia:
    uno de los objetivos de diseño de HDFS es procesar grandes conjuntos de datos y un alto rendimiento. Esto seguramente tendrá el costo de una alta latencia. Por lo tanto, HDFS no es adecuado para manejar las solicitudes de aplicaciones de baja latencia a nivel de milisegundos que requieren los usuarios.
  2. No es adecuado para el acceso a archivos pequeños:
    una es que una gran cantidad de archivos pequeños necesitan consumir mucho tiempo de direccionamiento, lo que viola el objetivo de diseño de HDFS de reducir la proporción de tiempo de direccionamiento tanto como sea posible. El segundo es la memoria limitada. El gran consumo de memoria de un bloque de metadatos es de aproximadamente 150 bytes, y almacenar 100 millones de bloques y almacenar 100 millones de archivos pequeños consumirá 20G de memoria. Por lo tanto, en términos relativos, los archivos grandes ahorran memoria.
  3. No es adecuado para la escritura simultánea y los archivos se modifican aleatoriamente:
    los archivos en HDFS solo pueden tener un escritor y solo se admiten operaciones de adición. No admite que varios usuarios escriban en el mismo archivo y modifiquen cualquier parte del archivo.

Para obtener contenido más emocionante de big data, bienvenido a buscar " Qianfeng Education " en la estación B o escanear el código para obtener un conjunto completo de materiales 

[Educación de Qianfeng] Un conjunto completo de tutoriales sobre el desarrollo de big data, el video de aprendizaje de big data más completo de la historia

 

Supongo que te gusta

Origin blog.csdn.net/longz_org_cn/article/details/131653087
Recomendado
Clasificación