La fsimage y las ediciones del NameNode en HDFS

① Diseño de metadatos NameNode
  • En HDFS, se debe acceder a los metadatos con frecuencia y NameNode también es necesario para responder de manera eficiente a las solicitudes del Cliente. Si los metadatos se almacenan en el disco del NameNode, debe ser demasiado ineficaz.

Los metadatos deben almacenarse en la memoria.

  • Sin embargo, si los metadatos se almacenan en la memoria, se perderán si se corta la energía. Después de reiniciar, todo el clúster no puede funcionar.

Se debe hacer una copia de seguridad de los metadatos en el disco, llamado fsimage.

  • Los metadatos en la memoria se actualizan y la imagen f en el disco debe actualizarse al mismo tiempo para garantizar la coherencia de los datos. Sin embargo, si los metadatos de la memoria se actualizan cada vez que se sincronizan con el disco, la eficiencia será muy baja.
  1. El archivo EditLog (ediciones para abreviar) se introduce para registrar cada paso de la operación de actualización de metadatos del cliente (solo se realizan operaciones de adición, lo cual es muy eficiente).
  2. Siempre que se actualizan los metadatos, la operación de actualización se registra en las ediciones y las ediciones también se almacenan en el disco duro.
  3. Una vez que se apaga el nodo NameNode, fsimage y las ediciones se pueden combinar para generar los últimos metadatos.
  • Si los registros de operaciones se agregan a las ediciones durante mucho tiempo, los datos del archivo serán demasiado grandes y se reducirá la eficiencia. Además, el tiempo de recuperación después de un corte de energía aumenta.

Necesita fusionar fsimage y ediciones con regularidad.

  • Si las operaciones de fusión regulares de fsimage y las ediciones se transfieren al nodo NameNode para que se completen, se producirá una reducción de la eficiencia.

Se introdujo un nodo NameNode secundario, SecondaryNameNode, dedicado a la fusión de fsimage y ediciones

  • Diseño de metadatos de NameNode:
  1. Para garantizar que se pueda acceder a los metadatos de manera eficiente y almacenarlos de manera persistente, es necesario almacenar los metadatos tanto en la memoria como en el disco. El primero almacena los metadatos completos y el segundo almacena el espejo de metadatos (fsimage).
  2. La fsimage en el disco no se puede actualizar cada vez. Primero, use el archivo de ediciones agregado al disco para almacenar la actualización y luego combínelo regularmente para asegurar la eficiencia de las ediciones.
  3. Para reducir la carga de trabajo del NameNode, se SecondaryNameNodecompleta el trabajo de combinación .
  4. Cuando el sistema se reinicia, al fusionar los archivos fsmige y edita, se pueden regenerar metadatos completos en la memoria.
② Definición de fsimage y ediciones
  • fsimage: El archivo de imagen de los metadatos en la memoria del NameNode es un punto de control permanente de los metadatos, que contiene la información de serialización de todos los directorios e idnodes de archivos en HDFS.
  • ediciones: Se utiliza para conectar el registro de operaciones entre los metadatos de la memoria y fsimage. Guarda todas las operaciones para el sistema de archivos HDFS desde el último punto de control, como agregar archivos, renombrar archivos, eliminar directorios, etc.
  • edits.new: también conocido como edits_inprogressel archivo de ediciones que se está escribiendo, utilizado para almacenar el último registro de operaciones. Después de cada checkponit, se completa la actualización de fsimage, cámbiele el nombre a ediciones.
  • El nombre de fsimage, ediciones edits_inprogressy ejemplos específicos:
    Los directorios de metadatos HDFS de Hadoop Namenode lo
    llevan a comprender realmente el mecanismo operativo de HDFS-Namenode
③ Actualización de fsimage
  1. SecondaryNameNodeCompruebe periódicamente el tamaño de las ediciones y, cuando las ediciones alcancen el tamaño especificado o lleguen al tiempo de fusión, combínelas por RollEditLog()método.
  2. Primero deje de escribir en las ediciones actuales y genere un archivo temporal ediciones.nuevo, y luego los nuevos registros de operaciones se escriben en ediciones.nuevo. (Retroceso de registros)
  3. SecondaryNameNodeObtenga nuevas ediciones y archivos fsimage del NameNode a través del método http get.
  4. SecondaryNameNodeCombine ediciones y archivos fsimage para generar fsimage.ckptarchivos.
  5. fsimage.ckptEl archivo se envía al NameNode en forma de publicación http.
  6. NameNode cambiará de fsimage.ckptnombre a fsimage, es decir, fsimage se actualiza; después de actualizar fsimage, edits.new cambia de nombre a archivo de ediciones.

Inserte la descripción de la imagen aquí

El proceso de combinación de fsimage y ediciones

  • ediciones de fsimage combinadas con condiciones del core-site.xmlmedio fs.checkpoint.periody fs.checkpoint.sizeun control común:

    1. fs.checkpoint.period: indica la frecuencia con la que se graba la imagen HDFS, el valor predeterminado es una hora (3600 s)
    2. fs.checkpoint.size: indica el tamaño del registro a la vez. La fusión también se activará cuando las ediciones alcancen un tamaño determinado (por defecto 64 MB)
  • También hay una segunda forma de decir: cuando edits.new está en el punto de control, se escribe como un archivo de ediciones desplazándose y se crea un nuevo edits.new. Después de eso, después de que se actualice fsimage, no es necesario cambiar el nombre de edits.new.

  • Personalmente, estoy de acuerdo con el segundo argumento: puedes ver los metadatos de NameNode y el análisis del punto de control .

  • Nota: ¡Para rollEditLog() la función, necesita ver el código fuente! ! !

④ Enlace de referencia
⑤ Errores comunes
  • Malentendido: SecondaryNameNode es la copia de seguridad de NameNode para admitir HA.
  • SecondaryNameNodeSolo para fusionar periódicamente ediciones y fsimage para reducir la carga en NameNode.

Supongo que te gusta

Origin blog.csdn.net/u014454538/article/details/107598237
Recomendado
Clasificación