La Red de Conocimientos Pedagógicos - Currículum vitae - Arquitectura HDFS de la serie Hadoop

Arquitectura HDFS de la serie Hadoop

Este artículo traduce la arquitectura HDFS de la serie Hadoop. El texto original, traducido por el autor, tiene unas 6.000 palabras. Posteriormente, el autor simplificó y comprimió el contenido para que el autor y otros lectores pudieran aprender o revisar Hadoop de manera más eficiente y rápida al leer este artículo. Este artículo presenta principalmente la arquitectura general de Hadoop, incluidos, entre otros, conceptos de nodos, espacios de nombres, mecanismos de tolerancia a fallas de datos, métodos de administración de datos, comandos de script simples y conceptos de recolección de basura.

PD: Soy un novato. Si ve alguna pregunta, ¡deje un comentario a continuación!

Hadoop Distributed File System (HDFS) es un sistema de archivos distribuido de alto rendimiento y altamente tolerante a fallos que se utiliza para procesar cantidades masivas de datos.

HDFS generalmente consta de cientos de máquinas, cada una de las cuales almacena una parte de todo el conjunto de datos. Detectar y recuperarse rápidamente de fallas de las máquinas es un objetivo principal de HDFS.

El objetivo principal de la interfaz HDFS es un alto rendimiento en lugar de una baja latencia.

HDFS admite la recopilación masiva de datos y un clúster generalmente puede admitir decenas de millones de archivos.

Las aplicaciones HDFS requieren un modelo de interfaz que escriba un archivo una vez y lo lea varias veces. La modificación del archivo solo admite cola y truncamiento.

El enorme volumen de datos y las características consistentes de la interfaz de HDFS hacen que la migración de cálculos para adaptarse al contenido del archivo sea más eficiente que la migración de datos para admitir cálculos.

HDFS admite el uso multiplataforma.

HDFS adopta una arquitectura maestro-esclavo. Un clúster HDFS consta de un NameNode, un servidor maestro (utilizado para administrar el espacio de nombres del sistema y controlar la interfaz de archivos del cliente) y una gran cantidad de DataNodes (generalmente se utiliza un nodo para administrar el almacenamiento de datos del nodo). HDFS expone el espacio de nombres del sistema de archivos y permite que los datos del usuario se almacenen en archivos. Los archivos se dividen en uno o más fragmentos, que se almacenan en un conjunto de DataNodes. NameNode realiza comandos como abrir, cerrar y cambiar el nombre del espacio de nombres del sistema de archivos y registra la asignación entre bloques y DataNodes. DataNode se utiliza para manejar solicitudes de lectura y escritura del cliente y operaciones relacionadas con bloques. NameNode y DataNode generalmente se ejecutan en el sistema operativo GNU/Linux. HDFS está desarrollado en lenguaje Java, por lo que NameNode y DataNode pueden ejecutarse en cualquier máquina que admita Java. Además, la alta portabilidad del lenguaje Java permite que HDFS se lance en una variedad de máquinas. Un clúster HDFS ejecuta un NameNode y otras máquinas ejecutan uno (o más, muy raramente) DataNodes. NameNode simplifica la arquitectura del sistema y solo se usa para almacenar todos los metadatos de HDFS. Los datos del usuario no ingresan a este nodo. La siguiente figura muestra el diagrama de arquitectura de HDFS:

HDFS admite la administración de archivos jerárquica tradicional, donde los usuarios o aplicaciones pueden crear directorios o archivos en directorios. Los espacios de nombres del sistema de archivos son similares a otros sistemas de archivos y admiten la creación, eliminación, movimiento y cambio de nombre de archivos. HDFS admite límite de usuarios y control de acceso, pero no admite enlaces blandos ni duros. Los usuarios pueden implementar ellos mismos enlaces físicos y físicos. NameNode controla el espacio de nombres y casi cualquier cambio en el espacio de nombres se registra en NameNode. Las aplicaciones pueden declarar la cantidad de réplicas de un archivo en HDFS, lo que se denomina factor de réplica y se registrará en el NameNode.

HDFS almacena cada archivo como uno o más bloques y establece el tamaño del bloque y el factor de replicación del archivo para admitir la tolerancia a fallas del archivo. Todos los bloques de un archivo (excepto el último bloque) tienen el mismo tamaño y se admiten bloques posteriores de longitud variable. El factor de replicación se especifica cuando se crea el archivo y se puede cambiar más adelante. Un archivo sólo puede tener un escritor a la vez. NameNode es responsable de la replicación de bloques. Recibe periódicamente informes de latidos y bloques de cada DataNode. El latido indica el funcionamiento normal del nodo de datos y el informe de bloque contiene todos los bloques para ese nodo de datos.

La solución de almacenamiento de copias es crucial para la estabilidad y el rendimiento de HDFS. Para mejorar la confiabilidad y la flexibilidad de los datos y aprovechar al máximo el ancho de banda de la red, HDFS introduce una estrategia de almacenamiento de copias en rack. Este es solo el primer paso en la estrategia de almacenamiento de copias y sienta las bases para la optimización posterior. Los clústeres HDFS a gran escala normalmente se ejecutan en clústeres de computadoras que abarcan muchos bastidores.

En términos generales, la transferencia de datos entre dos nodos en el mismo rack es más rápida que la transferencia de datos entre racks diferentes. Un enfoque sencillo es almacenar réplicas en bastidores separados, lo que evita la pérdida de datos y aumenta el ancho de banda, pero aumenta la carga de escritura de datos. En general, el factor de replicación es 3 y la estrategia de almacenamiento HDFS es almacenar la primera copia en la máquina local o en el siguiente DataNode aleatorio en el mismo rack, y almacenar las otras dos copias en diferentes DataNodes en el mismo rack remoto. NameNode no permite que el mismo DataNode almacene la misma copia varias veces. Sobre la base de la estrategia de reconocimiento de bastidores, en el futuro se admitirá una estrategia que combine el tipo de almacenamiento y el reconocimiento de bastidores. En pocas palabras, es para juzgar si el DataNode admite este tipo de archivo en función del rack. Si no lo admite, busque el siguiente.

HDFS utiliza el principio de proximidad para leer datos. Primero, busca réplicas en el mismo rack, luego el centro de datos local y finalmente el centro de datos remoto.

Al iniciarse, el NameNode entra en modo seguro, en el que no se produce ninguna copia de bloques de datos. NameNode recibe informes de latidos y bloques de DataNode. El número mínimo de copias de cada bloque es n. Después de que NameNode recibe n bloques, considera que el bloque de datos se ha copiado de forma segura. Cuando la proporción de bloques de datos que se han replicado de forma segura alcanza un valor porcentual configurable, después de otros 30 segundos, el NameNode sale del modo seguro y finalmente determina si todavía hay bloques de datos que no han alcanzado el número mínimo de réplicas y los replica. bloques de datos.

NameNode usa un registro de transacciones llamado EditLog para registrar continuamente cada cambio en los metadatos del sistema de archivos (como la creación de archivos, el cambio de coeficientes de replicación) y usa un archivo llamado FsImage para almacenar todos los archivos del espacio de nombres del sistema (incluido el mapeo). relación entre bloques y archivos y atributos relacionados del sistema de archivos). EditLog y FsImage se almacenan en el sistema de archivos local de NameNode. NameNode mantiene una instantánea de los metadatos y el mapeo de bloques en la memoria. Cuando se inicia NameNode o un determinado elemento de configuración alcanza un umbral, lee EditLog y FsImage del disco, actualiza FsImage en la memoria con el nuevo registro de EditLog, luego descarga la nueva versión de FsImage en el disco y luego trunca los registros EditLog procesados. Este proceso es un punto de control. El propósito de los puntos de control es garantizar que el sistema de archivos continúe observando los cambios de metadatos utilizando una instantánea de los metadatos en la memoria y almacenando la información de la instantánea en el disco FsImage. Los puntos de control se basan en los dos parámetros de configuración siguientes: período de tiempo (dfs.namenode.checkpoint.period) y número de transacciones del sistema de archivos (dfs.namenode.checkpoint.txns). Cuando ambos estén configurados, se activará un punto de control si se cumple alguna de las condiciones.

Todos los protocolos de red HDFS se basan en TCP/IP. El cliente establece un puerto TCP configurable para la máquina NameNode para la interacción entre ellos. DataNode utiliza el protocolo DataNode para interactuar con NameNode, y RPC envuelve el protocolo del cliente y el protocolo DataNode. Por diseño, NameNode solo es responsable de responder a las solicitudes RPC de clientes o DataNodes.

El objetivo principal de HDFS es garantizar la confiabilidad de los datos, incluso en presencia de fallas o errores. Tres escenarios de falla comunes incluyen falla de NameNode, falla de DataNode y falla de partición de red.

Las particiones de red pueden provocar que se desconecten partes de la conexión del DataNode al NameNode. NameNode juzga según el paquete de latidos y marca el DataNode desconectado como suspendido. Luego, todos los datos registrados en el DataNode suspendido no estarán disponibles, lo que puede causar que el número de replicaciones de algunos bloques de datos sea menor que la replicación configurada originalmente. coeficiente. NameNode realiza un seguimiento de qué bloques deben copiarse y los copia si es necesario. Las condiciones de activación incluyen una variedad de situaciones: DataNode no está disponible, la replicación es confusa, falla del disco de hardware o aumentos de coeficientes negativos.

Para evitar tormentas de replicación causadas por el estado inestable de DataNode, el tiempo de espera para marcar DataNode como suspendido se establece muy largo (el valor predeterminado es 10 minutos. Los usuarios pueden establecer un intervalo de tiempo más corto para marcar DataNode como desactualizado para evitar altos requisitos de lectura y escritura). Las solicitudes utilizan estos nodos obsoletos.

La arquitectura HDFS es compatible con varios esquemas de reequilibrio de datos. Cuando el espacio libre de un DataNode es menor que un cierto umbral, un esquema puede mover datos a otro DataNode. Cuando un archivo en particular repentinamente tiene una alta demanda de lectura, un enfoque es crear de manera proactiva réplicas adicionales para equilibrar otros datos en el clúster. Estos tipos de esquemas de equilibrio aún no se han implementado (no está claro cuáles son los esquemas existentes...).

Problemas con el dispositivo de almacenamiento, la red o el software pueden causar que los datos obtenidos del DataNode ser confuso. El cliente HDFS ha verificado el contenido del archivo. Cuando un cliente crea un archivo, calcula la suma de verificación para cada bloque del archivo y lo almacena en el espacio de nombres. Cuando el cliente recupere los datos, verificará cada fragmento utilizando el valor de verificación. Si hay un problema, el cliente irá a otro DataNode para obtener una copia de este bloque.

FsImage y EditLog son las estructuras de datos centrales de HDFS y sus errores harán que todo HDFS se cuelgue. Por lo tanto, NameNode debe admitir la replicación multipunto de FsImage y EditLog en cualquier momento, y todos los archivos deben actualizarse simultáneamente si hay cambios. Otra opción es utilizar almacenamiento compartido o registros de edición distribuidos en NFS para admitir múltiples NameNodes. Registro de edición distribuido recomendado oficialmente.

Las instantáneas pueden almacenar una copia de los datos en un momento específico, lo que permite que HDFS regrese a la versión estable anterior cuando ocurre un error.

El escenario de aplicación de HDFS son grandes conjuntos de datos. Los datos solo deben escribirse una vez, pero deben leerse una o varias veces y admite datos de lectura de tráfico. Normalmente, el tamaño del bloque es de 128 MB, por lo que un archivo se corta en fragmentos de 128 MB y cada fragmento se puede distribuir en un DataNode diferente.

Cuando un cliente escribe datos con un factor de replicación de 3, el NameNode recibe el conjunto de DataNodes que escribirá la réplica a través de un algoritmo de selección de destino. El primer DataNode comienza a recopilar datos parte por parte, almacena cada parte localmente y los reenvía al segundo DataNode. El segundo nodo de datos también almacena cada parte localmente y la reenvía al tercer nodo de datos, que almacena los datos localmente. Esta es una copia del canal.

HDFS proporciona una variedad de métodos de acceso, como la API Java del sistema de archivos, el contenedor de lenguaje C de esta API Java y la API REST, y también admite la navegación directa por parte de los navegadores. Al utilizar una puerta de enlace NFS, los clientes pueden montar HDFS en un sistema de archivos local.

HDFS utiliza directorios y archivos para administrar datos y proporciona una interfaz de línea de comandos llamada FS Shell. A continuación se muestran algunos comandos simples:

El conjunto de comandos DFSAdmin se utiliza para administrar clústeres HDFS. Estos comandos solo pueden ser utilizados por administradores de clústeres. Aquí hay algunos comandos simples:

Una instalación HDFS normal configurará un servicio web que expone el espacio de nombres a través de un puerto TCP configurable para que los usuarios puedan ver el contenido del archivo a través de un navegador web.

Si la configuración de recolección de basura está activada, los archivos eliminados a través del shell FS no se eliminarán inmediatamente, sino que se moverán a un directorio dedicado a los archivos basura (/usuario/

Cuando el archivo Cuando el coeficiente de réplica disminuye, NameNode selecciona réplicas redundantes para eliminar y envía un mensaje de eliminación al DataNode cuando se recibe un paquete de latido. Como se mencionó anteriormente, esta operación de eliminación tarda algún tiempo en mostrar un aumento en el espacio disponible. en el clúster.

Arquitectura HDFS