Siga un archivo a través de los bloques de HDFS

Big DataBeginner
Practicar Ahora

Introducción

Los archivos de la empresa minorista tienen nombres y directorios, pero las máquinas también deben almacenar su contenido en algún lugar. ¿Cómo puede repartirse un archivo grande entre nodos de almacenamiento? ¿Qué copia HDFS cuando conserva una réplica? ¿Un bloque casi vacío reserva todo el espacio de disco de un bloque completo?

Ya sabe organizar y conservar archivos. En este laboratorio, examinará lo que hay detrás de sus rutas. Un bloque de HDFS es una porción de un archivo que HDFS registra y almacena. El NameNode conserva metadatos sobre los archivos y las ubicaciones de sus bloques; los DataNodes contienen los datos de los bloques. Una réplica es otra copia almacenada de un bloque, no un nuevo registro comercial ni otro archivo visible para el usuario.

Subirá dos archivos preparados con un tamaño de bloque deliberadamente pequeño y válido, predecirá sus números de bloques y examinará las ubicaciones reales. Este entorno con un solo DataNode utiliza un factor de replicación de 1. Proporciona observaciones reales sin pretender demostrar la recuperación entre varias máquinas. Todos los datos y servicios se preparan de forma independiente. Utilice Terminal; no se requiere programación.

Relacione el tamaño del archivo con los bloques

En este paso, subirá un archivo con un tamaño de bloque conocido y examinará sus metadatos.

Una ruta del sistema de archivos identifica un archivo lógico. HDFS divide su contenido en bloques para que, en un clúster mayor, distintas partes puedan almacenarse en DataNodes diferentes. El tamaño configurado de un bloque es un tamaño máximo de datos para ese bloque, no una garantía de que todos los bloques estén llenos.

Comience en el directorio del proyecto:

cd /home/labex/project

El comando local wc -c cuenta bytes. Utilícelo con el primer archivo preparado:

wc -c /home/labex/project/data/products-a.txt

El resultado comienza con 1572864: exactamente 1,5 MiB. Un MiB equivale a 1.048.576 bytes. Este archivo repite una etiqueta de producto sencilla para que el experimento de almacenamiento no tenga reglas comerciales complicadas.

Cree un directorio personal de HDFS:

hdfs dfs -mkdir -p /user/labex/block-study

En esta demostración, -Ddfs.blocksize=1048576 sustituye el ajuste de tamaño de bloque del cliente para la subida siguiente. -D proporciona una propiedad de configuración para este comando; no modifica los archivos de configuración compartidos. Un MiB cumple el límite mínimo de tamaño de bloque de esta imagen y mantiene pequeña la demostración:

hdfs dfs -Ddfs.blocksize=1048576 -put /home/labex/project/data/products-a.txt /user/labex/block-study/products-a.txt

Prediga la distribución: 1,5 MiB con un tamaño de bloque de 1 MiB requiere un bloque lleno y otro a la mitad, es decir, dos bloques.

La operación -stat de HDFS imprime metadatos seleccionados. En su formato entre comillas, %b indica la longitud del archivo en bytes, %o indica el tamaño de bloque y %r indica el factor de replicación:

hdfs dfs -stat 'bytes=%b blocksize=%o replication=%r' /user/labex/block-study/products-a.txt

Valores esperados:

bytes=1572864 blocksize=1048576 replication=1

La longitud del archivo sigue siendo 1,5 MiB. Un factor de replicación de 1 significa una copia almacenada por bloque, no un bloque para todo el archivo. Guarde los metadatos reales:

hdfs dfs -stat 'bytes=%b blocksize=%o replication=%r' /user/labex/block-study/products-a.txt > /home/labex/project/output/file-a-metadata.txt

Si el archivo ya existe por una subida completada, examínelo antes de repetir la subida; no elimine un archivo solo porque -put informe de un destino existente.

Examine las ubicaciones y prediga un cambio

En este paso, encontrará los bloques reales del primer archivo y pondrá a prueba su predicción con un archivo mayor.

El comando hdfs fsck puede examinar el estado de almacenamiento de un archivo. En la siguiente inspección de solo lectura, -files incluye detalles del archivo, -blocks incluye información de los bloques y -locations incluye los DataNodes que contienen cada bloque. Ninguna de estas opciones repara ni elimina archivos:

hdfs fsck /user/labex/block-study/products-a.txt -files -blocks -locations

Busque la línea de longitud del archivo, las entradas de bloques y el campo Total blocks (validated) del resumen. Debería haber dos bloques. Uno contiene 1.048.576 bytes y el otro 524.288 bytes. Los identificadores de bloque, las direcciones y las marcas de tiempo varían. El resumen final del estado del sistema de archivos debería ser HEALTHY.

Guarde la inspección:

hdfs fsck /user/labex/block-study/products-a.txt -files -blocks -locations > /home/labex/project/output/file-a-blocks.txt

Un resultado saludable significa que esta comprobación encontró los bloques y las réplicas requeridos. Con una réplica por bloque en una sola máquina, no significa que el archivo pueda sobrevivir a la pérdida de esa máquina.

Ahora examine el tamaño del segundo archivo local:

wc -c /home/labex/project/data/products-b.txt

Su longitud es de 2621440 bytes, o 2,5 MiB. Antes de subirlo, prediga el número y los tamaños de sus bloques con el mismo tamaño de bloque de 1 MiB. Solo cambia la longitud del archivo:

hdfs dfs -Ddfs.blocksize=1048576 -put /home/labex/project/data/products-b.txt /user/labex/block-study/products-b.txt

Examine el resultado:

hdfs fsck /user/labex/block-study/products-b.txt -files -blocks -locations

Debería encontrar tres bloques: dos bloques llenos y uno de 524.288 bytes. Todas las ubicaciones hacen referencia al mismo DataNode en este laboratorio. Guarde la observación:

hdfs fsck /user/labex/block-study/products-b.txt -files -blocks -locations > /home/labex/project/output/file-b-blocks.txt

En un clúster mayor, los bloques pueden ubicarse en máquinas diferentes. El NameNode proporciona metadatos de ubicación a los clientes; no es un conducto central por el que deba pasar cada byte del contenido de los archivos.

Interprete el espacio, las réplicas y el recorrido de los datos

En este paso, relacionará las observaciones de bloques con el tamaño del archivo y el informe real del nodo de almacenamiento.

Un bloque final a medio llenar no reserva un MiB completo de espacio de datos solo porque el tamaño de bloque esté configurado en 1 MiB. Utilice -du sin -h para mantener visibles los números exactos de bytes:

hdfs dfs -du /user/labex/block-study

Las dos primeras columnas de cada archivo deberían ser:

1572864  1572864  .../products-a.txt
2621440  2621440  .../products-b.txt

La primera columna es la longitud lógica del archivo; la segunda tiene en cuenta la replicación. Aquí coinciden porque la replicación es 1. Estos valores describen los datos de archivos de HDFS, no todos los bytes de metadatos del sistema de archivos ni el uso total de disco de la máquina virtual. Guarde las filas:

hdfs dfs -du /user/labex/block-study > /home/labex/project/output/block-report.txt

Consulte el informe real del nodo de almacenamiento con el comando administrativo de solo lectura presentado en el laboratorio del entorno:

sudo -u hdfs /usr/local/bin/hdfs dfsadmin -report

Busque Live datanodes (1). Establecer la replicación en 3 no crearía tres máquinas; este laboratorio mantiene la replicación en 1 en lugar de dejar bloques a la espera de réplicas que no están disponibles.

Relacione las observaciones con el recorrido de los datos:

Escritura: el cliente pide al NameNode crear un archivo y luego envía los datos de los bloques a los DataNodes.
Lectura:   el cliente pide las ubicaciones al NameNode y luego lee los datos de los bloques de los DataNodes.

Con varias réplicas en un clúster mayor, un cliente puede utilizar una copia disponible y un marco de procesamiento puede intentar ejecutar el trabajo cerca de los datos. Esta idea se denomina localidad de los datos. Una copia con nombre creada con -cp es un segundo archivo lógico; las réplicas son copias de almacenamiento de bloques dentro de un archivo lógico. Resuelven problemas diferentes.

Su ejercicio de predicción cambió el tamaño del archivo, no el factor de replicación. El archivo A sigue teniendo dos bloques, el archivo B tiene tres y ambos tienen una réplica por bloque. A continuación, aprenderá por qué un archivo puede estar presente y saludable y, aun así, no poder ser leído por un usuario concreto: los permisos de acceso.

Resumen

Predijo y observó cómo archivos de 1,5 MiB y 2,5 MiB se dividen en dos y tres bloques de 1 MiB. Examinó las ubicaciones reales de los bloques y distinguió la longitud lógica de los archivos, el almacenamiento de réplicas y los archivos adicionales con nombre.

También relacionó esos resultados con los metadatos del NameNode y las transferencias de los DataNodes. El entorno de un solo nodo ilustra estas responsabilidades y deja la capacidad y la tolerancia a fallos entre varias máquinas para una exploración posterior.