Administre el ciclo de vida de los archivos de HDFS

Big DataBeginner
Practicar Ahora

Introducción

La empresa minorista ha recibido un archivo de productos. Un colega necesita una copia para revisar, otro necesita una versión archivada y usted necesita descargar el archivo revisado para examinarlo. Si estas acciones sustituyen o eliminan accidentalmente el original, el equipo pierde su entrada de confianza.

El ciclo de vida de un archivo es el conjunto de acciones por las que pasa: llegada, uso, archivado, exportación y eliminación final. HDFS proporciona operaciones para cada acción, pero sus efectos son diferentes. Subir y descargar copian entre sistemas de archivos; copiar y mover dentro de HDFS mantienen los archivos en HDFS.

Organizará directorios separados para datos originales, archivos conservados y trabajo temporal, preservará el archivo original, exportará una copia archivada y eliminará únicamente una copia desechable. Ya conoce las rutas de HDFS y los comandos de subida y lectura; este laboratorio añade una administración cuidadosa de archivos. El entorno y los datos son independientes de los laboratorios anteriores. Utilice Terminal durante toda la actividad.

Conserve una entrada original

En este paso, subirá la entrada de la empresa minorista a un directorio reservado para archivos originales.

Un archivo raw es una entrada conservada en su forma original. Un directorio scratch separado contiene trabajo temporal y un directorio archive contiene una copia que se conserva. Los nombres de directorio no imponen estas reglas automáticamente; hacen visibles sus intenciones.

Comience en el espacio de trabajo local:

cd /home/labex/project

Lea la entrada antes de almacenarla:

cat /home/labex/project/data/products.txt

Contiene:

notebook pen notebook
folder pen
notebook folder

Utilice -mkdir -p con tres rutas de directorio. HDFS crea cada directorio indicado y los directorios padre que falten:

hdfs dfs -mkdir -p /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive /user/labex/file-lifecycle/scratch

Suba la entrada local al directorio de datos originales:

hdfs dfs -put /home/labex/project/data/products.txt /user/labex/file-lifecycle/raw/products.txt

Una subida correcta normalmente no imprime nada. Si la repite, un error de destino existente protege el archivo almacenado frente a una sobrescritura accidental. Examine la entrada almacenada en lugar de eliminarla para silenciar el error:

hdfs dfs -cat /user/labex/file-lifecycle/raw/products.txt

El texto debería coincidir con el original local. El original también permanece en el sistema de archivos local: -put copia su origen local, en lugar de moverlo. En el trabajo posterior utilizará copias para mantener intacta esta entrada original.

Copie y archive dentro de HDFS

En este paso, creará una copia para revisar y después la moverá al archivo de conservación sin mover la entrada original.

La operación -cp copia un origen de HDFS a un destino de HDFS. A diferencia de -put, las dos rutas siguientes hacen referencia a HDFS:

hdfs dfs -cp /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/scratch/review.txt

Examine la copia de revisión:

hdfs dfs -cat /user/labex/file-lifecycle/scratch/review.txt

Debería ver las mismas etiquetas de productos. Un nombre diferente sigue representando los mismos datos, no un nuevo lote de ventas.

Cuando una copia revisada esté lista para conservarse, muévala con -mv. Moverla dentro de este sistema de archivos cambia su ruta; no conserva la ruta de origen. Antes de ejecutar el comando, prediga qué archivo desaparecerá y cuál permanecerá:

hdfs dfs -mv /user/labex/file-lifecycle/scratch/review.txt /user/labex/file-lifecycle/archive/products-reviewed.txt

Liste juntos los directorios temporal y de archivo. -ls acepta varias rutas:

hdfs dfs -ls /user/labex/file-lifecycle/scratch /user/labex/file-lifecycle/archive

La entrada archivada debería terminar en /archive/products-reviewed.txt; no debería haber una entrada review.txt en el directorio temporal. Confirme que el archivo original no se haya visto afectado:

hdfs dfs -cat /user/labex/file-lifecycle/raw/products.txt

Sus tres líneas deberían seguir coincidiendo. Si vuelve a este paso después de completarlo, examine la copia archivada existente en lugar de repetir el par de operaciones de copia y movimiento: -mv ya ha retirado el origen temporal y no se debe sobrescribir a la ligera una copia archivada existente.

Exporte y mida sus archivos

En este paso, descargará el archivo conservado y examinará el número de archivos y el uso de almacenamiento.

La operación -get copia un origen de HDFS a un destino local. La primera ruta siguiente es de HDFS; la segunda es local:

hdfs dfs -get /user/labex/file-lifecycle/archive/products-reviewed.txt /home/labex/project/output/products-exported.txt

El indicador de comandos debería volver sin salida. Si ya completó la descarga, examine el destino local; volver a descargar en un archivo existente puede indicar que ya existe. Utilice el comando local diff para comprobar el contenido, como en el primer laboratorio:

diff /home/labex/project/data/products.txt /home/labex/project/output/products-exported.txt

No debería aparecer ninguna diferencia. Esta es una copia exportada: tanto la copia archivada de HDFS como el original local permanecen.

Para medir el contenido de directorios, -count imprime el número de directorios, el número de archivos, el tamaño del contenido en bytes y la ruta. Incluye el propio directorio especificado en el número de directorios:

hdfs dfs -count /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive

Cada fila debería describir un directorio que contiene un archivo. Ambas filas deberían tener el mismo tamaño de contenido, porque los bytes archivados coinciden con los originales. Guarde las filas reales:

hdfs dfs -count /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive > /home/labex/project/output/file-counts.txt

La operación -du resume los tamaños de los archivos. -h elige unidades legibles para las personas cuando resulta útil:

hdfs dfs -du -h /user/labex/file-lifecycle/raw

Las columnas muestran el tamaño del contenido, el espacio consumido con las réplicas y la ruta. Este entorno utiliza un factor de replicación de 1, por lo que las dos columnas de tamaño deberían coincidir para este archivo. Explorará los bloques y la replicación en un laboratorio posterior; una segunda columna mayor en otro entorno no tiene por qué significar que haya más registros comerciales.

Antes de continuar, explique para sí mismo los límites: -cp permaneció dentro de HDFS, -mv cambió una ruta de HDFS y -get creó una copia local.

Elimine únicamente una copia desechable

En este paso, examinará la política de eliminación y retirará un archivo temporal conocido, conservando la entrada y la copia archivada.

La eliminación es un tipo de operación diferente: cuando un archivo deja de ser necesario, puede retirarse su ruta. HDFS puede tener una política de retención en la papelera (Trash), pero utilizar HDFS no garantiza la recuperación. Primero lea el intervalo configurado de la papelera, expresado en minutos:

hdfs getconf -confKey fs.trash.interval

El entorno preparado utiliza 0, lo que significa que la retención en la papelera está desactivada. Considere que una eliminación aquí es inmediata. Un valor positivo en otro entorno habilita un intervalo de retención, pero no sustituye la conservación de entradas de confianza.

Cree una copia cuyo único propósito sea practicar la eliminación:

hdfs dfs -cp /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/scratch/disposable.txt

Antes de eliminar nada, liste el destino exacto:

hdfs dfs -ls /user/labex/file-lifecycle/scratch/disposable.txt

Compruebe que la ruta termine en scratch/disposable.txt, no en raw/products.txt ni en la copia archivada. La operación -rm elimina el archivo especificado. No necesita eliminación recursiva ni un comodín:

hdfs dfs -rm /user/labex/file-lifecycle/scratch/disposable.txt

El comando informa de que se ha eliminado el archivo indicado. Si lo repitiera, informaría de un archivo inexistente; eso es motivo para examinar el estado, no para ampliar el destino de eliminación. Liste el directorio temporal para confirmar que no queden archivos temporales:

hdfs dfs -ls /user/labex/file-lifecycle/scratch

Un directorio vacío no produce entradas de archivos. Por último, examine los dos archivos que deben permanecer:

hdfs dfs -ls /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/archive/products-reviewed.txt

Ambas rutas deberían aparecer en el listado. Ha completado un ciclo de vida sin sacrificar el original: subir, copiar, archivar, exportar, medir y eliminar únicamente el trabajo temporal.

Resumen

Mantuvo intactos los datos originales mientras creaba una copia de revisión, movía esa copia a un archivo de conservación y la exportaba al sistema de archivos local. Interpretó los números de archivos y los tamaños de almacenamiento, examinó el ajuste de la papelera y eliminó únicamente un archivo desechable indicado por su nombre.

A continuación, aplicará estos hábitos a lotes diarios que contienen varios archivos. Saber qué archivos pertenecen a un lote es tan importante como saber subirlos.