,Ya hemos hecho hincapié en post anteriores que la principal faceta de Hadoop HDFS es el soporte de archivos de gran volumen. En este post se van a ver características del manejo y organización de los datos en el sistema de archivos de HDFS. El tamaño típico de bloque es de 64MB, por lo tanto cada archivo HDFS consiste de uno o más bloques de 64MB. Para que se pueda apreciar la magnitud de este sistema de archivos, NTFS que es el sistema de archivos utilizado en Windows, utiliza un tamaño de bloque mínimo de 512 bytes.
Proceso de creación de archivos Hadoop HDFS
Hadoop HDFS usa un sistema para poder usarse en varias máquinas pero aparentemente es como si sólo fuera un disco. El sistema HDFS sigue los siguientes pasos para la creación de archivos:
- Cuando un cliente crea un archivo en HDFS, primero se cachean los datos en un archivo local temporal.
- Cuando el archivo temporal tiene suficientes datos para llenar un bloque HDFS, el cliente informa al namenode, el cual convierte el archivo en un datanode permanente.
- El cliente cierra el archivo temporal y elimina cualquier dato no necesario en el datanode recién creado.
- El namenode envía al datanode al disco.
Replicación
Cuando un cliente acumula un conjunto completo de bloques del usuario, recupera una lista de los datanodes que contienen una réplica de ese bloque del namenode. A medida que el nodo recibe parte de datos, los escribe a disco y transfiere las copias al siguiente datanode en la lista, el siguiente datanode realizará la misma operación y así sucesivamente. Este proceso se repetirá hasta que se cumpla el factor de replicación.
Fiabilidad de los datos de almacenamiento Hadoop HDFS
Un objetivo importante de HDFS es almacenar los datos de forma fiable, incluso cuando ocurren fallos en el namenode, datanode o en la red. La detección de los fallos es el primer paso que realiza HDFS, para ello utiliza mensajes para detectar la conectividad entre el namenode y los datanodes.
Envío de los mensajes
La pérdida de conectividad se puede deber a diferentes causas entre el namenode y el datanode. Por lo tanto, cada datanode envía de forma periódica mensajes a su namenode, de esta forma el namenode puede detectar la perdida de conectividad si no recibe el mensaje de algún datanode. Si el namenode no recibe ningún mensaje de algún datanode, marca al datanode como muerto y deja de enviarle peticiones. Los datos almacenados en el datanode muerto ya no están disponibles para las peticiones cliente HDFS, por lo tanto dicho nodo se eliminará del sistema. Si la muerte de un nodo hace que no haya el mínimo de replicación de los bloques, el namenode se encarga de realizar la replicación para restablecer el factor de replicación.
Rebalanceo de bloques de datos Hadoop HDFS
El rebalanceo de los datos en el clúster es un mecanismo que usa HDFS para mantener la integridad de sus datos. Los bloques de datos no pueden estar siempre uniformemente ubicados en los datanodes, esto significa que el espacio usado por uno o más datanodes puede ser infrautilizado. HDFS soporta rebalanceo de carga usando varios modelos.
Un modelo puede mover bloques de datos de un datanode a otro automáticamente si queda poco espacio libre en el datanode. Y el otro modelo permite crear réplicas adicionales y rebalancear otros bloques en un clúster si se produce un aumento rápido de demanda de un determinado archivo. HDFS también proporciona el comando de balanceo para tareas de balanceo manuales.
Una razón común para balancear es la adición de los nuevos datanodes en un clúster. Cuando se colocan nuevos bloques, el namenode considera varios parámetros antes de elegir los datanodes que recibirán dichos bloques, alguno de los parámetros son:
- Réplica de bloques de escritura
- Prevención de pérdida de datos debido a un fallo en la instalación
- Datos uniformes repartidos en los datanodes en un clúster.
Integridad de los datos
HDFS mantiene la integridad de los datos a través de las agrupaciones. Realiza unas sumas computadas en el contenido de los archivos para la validación, cuando un cliente recupera un archivo puede verificar que los datos recibidos coinciden con la suma almacenada en el archivo asociado.
El nombre de espacio (namespace) se almacena usando un registro de transacción guardado en cada namenode. El nombre de espacio del sistema de archivos, junto con el mapeo de bloques de archivos y las propiedades del sistema de archivos, se almacenan en un archivo llamado FsImage. Cuando se inicializa un namenode, lee el archivo FsImage junto con otros archivos y aplica la información de estado que se encuentra en esos archivos.
Actualización síncrona de metadatos
Cada namenode usa un archivo log conocido como EditLog para almacenar cada transacción que ocurre con los metadatos en el sistema de archivos Hadoop HDFS. Si el EditLog o FsImage se corrompen, la instancia HDFS a la que pertenecen deja de funcionar. Por lo tanto un namenode soporta múltiples copias de un archivo EditLog o FsImage. Cuando un namenode se reinicia utiliza la última versión de FsImage y EditLog para inicializarse.
Permisos para usuarios, archivos y directorios.
Hadoop HDFS utiliza un modelo de permisos para archivos y directorios muy parecido a POSIX, por ejemplo a todos los archivos y directorios se les asigna un propietario y un grupo. HDFS soporta permisos de lectura (r), escritura (w) y ejecución (x). Ya que en HDFS no existe el concepto de ejecución de archivos, el permiso (x) toma otro significado. El atributo (x) nos indica el permiso para acceder a un directorio hijo de un directorio padre dado. El propietario es la identidad de quien lo creó, y el grupo es el grupo del directorio padre.
En la próxima entrega veremos una demo acerca de utilizar Hadoop en Windows Azure.
Aquí os dejamos unos post relacionados que publicamos anteriormente, y si queréis estar al tanto de las últimas novedades del sector, os animamos a suscribiros a nuestra newsletter 🙂
Introducción Hadoop Big Data [parte 1]
[/et_pb_text][/et_pb_column][/et_pb_row][/et_pb_section]