Anatomía de lectura y escritura de archivos en HDFS

Big data no es más que una colección de conjuntos de datos que son grandes, complejos y que son difíciles de almacenar y procesar utilizando las herramientas de gestión de datos disponibles o las aplicaciones tradicionales de procesamiento de datos. Hadoop es un marco (código abierto) para escribir, ejecutar, almacenar y procesar grandes conjuntos de datos de manera paralela y distribuida. Es una solución que se utiliza para superar los desafíos que enfrenta Big Data. 

Hadoop tiene dos componentes: 

  • HDFS (Sistema de archivos distribuidos de Hadoop)
  • YARN (Otro negociador de recursos más)

En este artículo, nos enfocamos en uno de los componentes de Hadoop, es decir, HDFS y la anatomía de la lectura y escritura de archivos en HDFS. HDFS es un sistema de archivos diseñado para almacenar archivos muy grandes (archivos que tienen un tamaño de cientos de megabytes, gigabytes o terabytes) con acceso a datos de transmisión, que se ejecuta en clústeres de hardware básico (hardware comúnmente disponible que se puede obtener de varios proveedores). En términos simples, la unidad de almacenamiento de Hadoop se llama HDFS. 

Algunas de las características de HDFS son: 

  • Tolerancia a fallos
  • Escalabilidad
  • Almacenamiento Distribuido
  • Fiabilidad
  • Alta disponibilidad
  • Económico
  • alto rendimiento

Bloques de construcción de Hadoop: 

  1. Node de nombre
  2. Node de datos
  3. Node de nombre secundario (SNN)
  4. Rastreador de trabajos
  5. Rastreador de tareas

Anatomía de la lectura de archivos en HDFS

Tengamos una idea de cómo fluyen los datos entre el cliente que interactúa con HDFS, el Node de nombre y los Nodes de datos con la ayuda de un diagrama. Considere la figura: 

HDFS Read

Paso 1: el cliente abre el archivo que desea leer llamando a open() en el objeto del sistema de archivos (que para HDFS es una instancia del sistema de archivos distribuido). 

Paso 2: el sistema de archivos distribuido (DFS) llama al Node de nombre mediante llamadas a procedimientos remotos (RPC) para determinar las ubicaciones de los primeros bloques del archivo. Para cada bloque, el Node de nombre devuelve las direcciones de los Nodes de datos que tienen una copia de ese bloque. El DFS devuelve un FSDataInputStream al cliente para que lea los datos. FSDataInputStream, a su vez, envuelve un DFSInputStream, que administra el Node de datos y la E/S del Node de nombre. 

Paso 3: el cliente luego llama a read() en la transmisión. DFSInputStream, que ha almacenado las direcciones de los Nodes de información para los pocos bloques principales dentro del archivo, luego se conecta al Node de datos principal (más cercano) para el bloque principal en el archivo. 

Paso 4: los datos se transmiten desde el Node de datos al cliente, que llama a read() repetidamente en la transmisión. 

Paso 5: cuando se llega al final del bloque, DFSInputStream cerrará la conexión con el Node de datos y luego buscará el mejor Node de datos para el siguiente bloque. Esto sucede de forma transparente para el cliente, que desde su punto de vista simplemente está leyendo un flujo interminable. Los bloques se leen como, con DFSInputStream abriendo nuevas conexiones a los Nodes de datos porque el cliente lee a través de la secuencia. También llamará al Node de nombre para recuperar las ubicaciones de los Nodes de datos para el próximo lote de bloques según sea necesario. 

Paso 6: cuando el cliente ha terminado de leer el archivo, se llama a la función close() en FSDataInputStream. 

Anatomía de la escritura de archivos en HDFS

A continuación, veremos cómo se escriben los archivos en HDFS. Considere la figura 1.2 para comprender mejor el concepto. 

Nota: HDFS sigue el modelo Escribir una vez Leer muchas veces. En HDFS no podemos editar los archivos que ya están almacenados en HDFS, pero podemos agregar datos al volver a abrir los archivos.

HDFS Write

Paso 1: el cliente crea el archivo llamando a create() en DistributedFileSystem (DFS). 

Paso 2: DFS realiza una llamada RPC al Node de nombre para crear un nuevo archivo en el espacio de nombres del sistema de archivos, sin bloques asociados. El Node de nombre realiza varias comprobaciones para asegurarse de que el archivo no existe y que el cliente tiene los permisos adecuados para crear el archivo. Si estas comprobaciones pasan, el Node de nombre prepara un registro del nuevo archivo; de lo contrario, el archivo no se puede crear y, por lo tanto, el cliente recibe un error, es decir, IOException. El DFS devuelve un FSDataOutputStream para que el cliente comience a escribir datos. 

Paso 3: debido a que el cliente escribe datos, DFSOutputStream los divide en paquetes, que escribe en una cola interior llamada cola de información. La cola de datos es consumida por el DataStreamer, que es responsable de pedirle al Node de nombre que asigne nuevos bloques seleccionando un inventario de Nodes de datos adecuados para almacenar las réplicas. La lista de Nodes de datos forma una canalización y aquí supondremos que el nivel de replicación es tres, por lo que hay tres Nodes en la canalización. El DataStreamer transmite los paquetes al Node de datos principal dentro de la tubería, que almacena cada paquete y lo reenvía al segundo Node de datos dentro de la tubería. 

Paso 4: De manera similar, el segundo Node de datos almacena el paquete y lo reenvía al tercer (y último) Node de datos en la canalización. 

Paso 5: DFSOutputStream mantiene una cola interna de paquetes que esperan ser reconocidos por los Nodes de datos, llamada «cola de reconocimiento». 

Paso 6: esta acción envía todos los paquetes restantes a la canalización del Node de datos y espera los reconocimientos antes de conectarse al Node de nombre para indicar si el archivo está completo o no. 

HDFS sigue los modelos Write Once Read Many. Por lo tanto, no podemos editar archivos que ya están almacenados en HDFS, pero podemos incluirlos al volver a abrir el archivo. Este diseño permite que HDFS se escale a una gran cantidad de clientes simultáneos porque el tráfico de datos se distribuye entre todos los Nodes de datos del clúster. Por lo tanto, aumenta la disponibilidad, la escalabilidad y el rendimiento del sistema. 

Publicación traducida automáticamente

Artículo escrito por ankurbarick y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *