Su primer laboratorio de Hadoop

Big DataBeginner
Practicar Ahora

Introducción

Usted está ayudando a una empresa minorista a responder una pregunta sencilla: ¿Qué productos aparecieron con mayor frecuencia en los registros diarios de nuestras tiendas? Antes de contar nada, necesita reunir los archivos y asegurarse de que su contenido esté disponible y sea correcto. Este laboratorio es el primer paso de ese recorrido.

De los datos cotidianos al big data

Una sola tienda podría guardar sus registros diarios en un archivo pequeño que se puede abrir en una computadora portátil. Ahora imagine miles de tiendas que envían registros todos los días, junto con la actividad del sitio web y las actualizaciones del almacén. Hay más datos que conservar, llegan datos nuevos constantemente y los archivos pueden tener estructuras diferentes.

Big data, o datos masivos, describe cargas de trabajo cuyo volumen, velocidad de llegada o complejidad dificulta su manejo con las herramientas y los recursos que utiliza actualmente. No existe un número universal de filas que convierta un archivo en big data. Las preguntas prácticas son: ¿puede almacenar los datos, procesarlos en el tiempo disponible y seguir trabajando cuando falle un equipo?

Para un archivo pequeño de ventas, una hoja de cálculo, una base de datos o un script de Python pueden ser suficientes. A medida que crece la carga de trabajo, una opción es repartir el almacenamiento y el procesamiento entre varias computadoras conectadas. Un grupo de computadoras que trabajan juntas se denomina clúster; repartir el trabajo entre ellas se denomina computación distribuida.

El papel de Hadoop

Apache Hadoop es un conjunto de herramientas de código abierto para almacenar y procesar datos en un clúster. Dos de sus componentes permiten formarse una primera idea:

Componente Su función La pregunta de la empresa minorista
HDFS — sistema de archivos distribuido de Hadoop Almacenar archivos entre varias máquinas y mantener copias de sus datos cuando se configura para ello ¿Dónde podemos guardar los archivos de entrada diarios?
MapReduce — un marco de procesamiento por lotes Dividir un trabajo de procesamiento en tareas más pequeñas y combinar sus resultados ¿Cómo podemos contar las etiquetas de productos de esos archivos?

Un lote es un conjunto delimitado de datos que se procesan juntos, como los archivos de ayer. En laboratorios posteriores ejecutará un programa de conteo ya preparado. En este laboratorio trabajará con HDFS, el componente de almacenamiento: un cálculo solo resulta útil si lee los datos previstos.

Hadoop forma parte de un conjunto más amplio de herramientas de datos. Los cursos posteriores presentan Hive para consultar archivos con SQL, Spark para procesar datos mediante programación y Kafka para entregar eventos de manera continua. No necesita esas herramientas para comenzar este laboratorio, ni memorizar todavía sus nombres.

Su primera parte del flujo de trabajo

El flujo de trabajo simplificado de la empresa minorista es:

Reunir archivos de productos → Guardarlos en HDFS → Procesar un lote → Examinar los conteos
                              Usted comienza aquí

Su tarea consiste en subir un archivo, volver a leerlo y comprobar que su contenido se haya conservado. Piense en ello como revisar un ingrediente antes de usarlo en una receta: un almacenamiento correcto precede a un cálculo fiable.

El laboratorio proporciona Hadoop en una sola máquina, para que pueda aprender comandos reales de HDFS sin instalar un clúster. En este entorno, los archivos locales y los archivos de HDFS siguen teniendo rutas y comandos de acceso independientes. Esta configuración no demuestra el almacenamiento repartido entre varias máquinas ni la recuperación ante el fallo de una máquina; comprenderá mejor esas ideas a medida que explore HDFS.

Al finalizar este laboratorio, podrá:

  • Distinguir un archivo local de un archivo almacenado en HDFS.
  • Crear un directorio de HDFS y subir un archivo.
  • Leer un archivo de HDFS y compararlo con el original local.
  • Subir los mismos datos con otro nombre de destino.

Utilice la pestaña Terminal durante todo el laboratorio. Solo necesita conocimientos básicos de terminal; no se requiere programación en Java ni Python. Si las rutas y los comandos de terminal son nuevos para usted, comience con la ruta de aprendizaje de Linux.

Suba su primer archivo a HDFS

En este paso, examinará un archivo local, creará su propio directorio de HDFS y subirá el archivo a ese directorio.

La terminal es donde escribe las solicitudes. El comando hdfs es un cliente: envía esas solicitudes al servicio HDFS en ejecución, que administra los archivos almacenados. A continuación verá tanto comandos locales de Linux como comandos de HDFS; el comando le indica qué almacenamiento está utilizando.

El laboratorio ya ha iniciado los servicios de HDFS y preparado un archivo de entrada pequeño. Haga clic en Terminal y ejecute cada comando siguiente, esperando a que vuelva a aparecer el indicador de comandos antes de continuar. Copie únicamente el comando, sin símbolos del indicador.

Utilice cd para situar el shell en el directorio local del proyecto:

cd /home/labex/project

La ruta comienza con /, por lo que es una ruta absoluta. La entrada local se encuentra en el directorio data situado dentro de esta ubicación. El comando habitual de Linux cat muestra un archivo local:

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

Contenido esperado:

notebook pen notebook
folder pen
notebook folder

Cada palabra es una etiqueta de producto y cada aparición representa un artículo registrado en este ejemplo simplificado. Ya puede contar a mano cinco apariciones de notebook y pen en total: tres cuadernos y dos bolígrafos. En muchos archivos grandes, un programa por lotes podría realizar ese conteo por usted.

Por ahora, tenga presente la pregunta, pero concéntrese en almacenar el texto exactamente como está. Utilizamos tres líneas fáciles de leer para que pueda reconocer inmediatamente un resultado correcto; este ejemplo por sí mismo no necesita Hadoop.

HDFS tiene su propio árbol de directorios. En este entorno, hdfs dfs envía comandos del sistema de archivos a HDFS. Crear un directorio local con mkdir de Linux no crearía un directorio de HDFS.

Cree un directorio dentro de su directorio personal de HDFS, /user/labex. La operación -mkdir crea un directorio; -p también crea los directorios padre que falten y acepta un directorio que ya exista:

hdfs dfs -mkdir -p /user/labex/your-first-hadoop-lab

Normalmente, una operación correcta no produce salida. El indicador de comandos vuelve a aparecer cuando finaliza la operación. Este directorio está en HDFS, aunque la ruta utilice la misma notación con barras que una ruta local.

La operación -put copia un archivo de origen local a un destino de HDFS. La primera ruta siguiente es local; la segunda está en HDFS:

hdfs dfs -put /home/labex/project/data/products.txt /user/labex/your-first-hadoop-lab/products.txt

Una subida correcta normalmente no produce salida y deja el original local en su sitio. Si repite este comando después de subir el archivo correctamente, HDFS informa de que el destino ya existe. Continúe examinándolo; no necesita eliminarlo ni sobrescribirlo.

Utilice -ls para listar el directorio de HDFS:

hdfs dfs -ls /user/labex/your-first-hadoop-lab

Debería ver Found 1 items y una entrada de archivo que termina en:

/user/labex/your-first-hadoop-lab/products.txt

La entrada también incluye permisos, un propietario, un grupo, un tamaño y una fecha de modificación. Explorará esos detalles más adelante. En este paso, la ruta de destino confirma que el archivo está presente en HDFS. A continuación, comprobará su contenido.

Vuelva a leer el archivo y compruebe su contenido

En este paso, leerá el archivo de HDFS, guardará su contenido localmente y lo comparará con el original.

La empresa minorista acabará contando etiquetas del archivo almacenado. Si se hubiera subido el archivo equivocado o se hubiera perdido una línea, los conteos posteriores podrían ser incorrectos aunque el programa se ejecutara correctamente. Un listado de directorio demuestra que un archivo existe, pero no que su contenido sea correcto.

Antes de volver a leerlo, prediga qué debería ver: ¿subir el archivo debería cambiar alguna etiqueta de producto o eliminar alguna línea? La operación -cat de HDFS lee un archivo de HDFS e imprime su contenido en la terminal:

hdfs dfs -cat /user/labex/your-first-hadoop-lab/products.txt

Contenido esperado:

notebook pen notebook
folder pen
notebook folder

Compárelo con el archivo local que examinó en el paso 1. Las palabras y los saltos de línea deberían coincidir. Observe la diferencia entre los comandos: cat lee el archivo local, mientras que hdfs dfs -cat lee el archivo de HDFS en este entorno.

Para conservar una copia local del resultado de la lectura, utilice el operador > del shell. Redirige la salida impresa del comando a un archivo local, creándolo o sustituyendo su contenido si ya existe. El directorio output preparado está destinado a sus resultados:

hdfs dfs -cat /user/labex/your-first-hadoop-lab/products.txt > /home/labex/project/output/products-readback.txt

Esta vez no aparece texto de productos en la terminal porque se ha escrito en el archivo local de salida. El origen en HDFS no cambia. Lea el resultado guardado con el comando local cat:

cat /home/labex/project/output/products-readback.txt

Debería mostrar las mismas tres líneas. Ahora tiene un original local, un archivo de HDFS y un archivo local con el resultado de la lectura.

Utilice diff para comparar el original y el resultado guardado. Cuando dos archivos son idénticos, diff no imprime nada y finaliza correctamente:

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

La vuelta al indicador de comandos sin diferencias confirma que el contenido leído coincide con el original. Si aparecen diferencias, repita el comando de lectura utilizando las rutas exactas del origen de HDFS y del archivo local de salida indicadas arriba, y vuelva a comparar.

Practique con un nuevo nombre de destino

En este paso, cambiará una parte del comando de subida y comprobará si cambia el contenido del archivo.

Antes de ejecutar el siguiente comando, prediga el resultado: si mantiene el origen local y cambia únicamente el nombre de archivo de destino en HDFS, ¿cambiarán las etiquetas de productos? ¿Seguirá existiendo el primer archivo de HDFS?

Suba de nuevo el archivo local original, esta vez utilizando products-copy.txt como nombre de destino:

hdfs dfs -put /home/labex/project/data/products.txt /user/labex/your-first-hadoop-lab/products-copy.txt

Como antes, una subida correcta normalmente no produce salida. Si ya ha completado esta subida, un mensaje de destino existente significa que debe examinar el archivo en lugar de volver a subirlo.

Liste el directorio de HDFS para comprobar su predicción:

hdfs dfs -ls /user/labex/your-first-hadoop-lab

Ahora debería ver Found 2 items, con entradas que terminan en estas rutas:

/user/labex/your-first-hadoop-lab/products-copy.txt
/user/labex/your-first-hadoop-lab/products.txt

Ambos archivos siguen presentes porque -put copia el origen local al destino indicado; no cambia el nombre del archivo anterior de HDFS. Este segundo archivo es una copia de práctica de los mismos registros, no las ventas de un día nuevo. Cuando aprenda a preparar entradas por lotes, seleccionará los archivos con cuidado para evitar contar dos veces las copias duplicadas.

Lea el nuevo archivo de HDFS:

hdfs dfs -cat /user/labex/your-first-hadoop-lab/products-copy.txt

La salida debería contener las mismas tres líneas de etiquetas de productos. Cambiar un nombre de archivo no cambia su contenido.

Utilice la misma técnica de lectura para guardar el nuevo archivo localmente:

hdfs dfs -cat /user/labex/your-first-hadoop-lab/products-copy.txt > /home/labex/project/output/products-copy-readback.txt

Compare ese resultado guardado con el original:

diff /home/labex/project/data/products.txt /home/labex/project/output/products-copy-readback.txt

No debería imprimirse ninguna diferencia. Ha comprobado ambas partes de su predicción: el primer archivo de HDFS permanece y el segundo contiene datos idénticos.

Antes de continuar, identifique qué comandos leen archivos locales y cuáles leen archivos de HDFS. En el próximo laboratorio examinará la configuración que indica a los comandos de HDFS dónde conectarse.

Resumen

Comenzó con la necesidad de una empresa minorista de reunir y contar registros de productos. Aprendió por qué el crecimiento de las cargas de trabajo de datos puede requerir almacenamiento y procesamiento distribuidos, y qué papel cumple Hadoop: HDFS almacena archivos y MapReduce puede procesar un lote.

Completó la parte de almacenamiento de ese flujo de trabajo: subió un archivo local de texto de ventas a HDFS, volvió a leerlo y utilizó diff para confirmar que su contenido se había conservado. Después predijo y comprobó el efecto de cambiar únicamente el nombre de destino en HDFS.

Practicó hdfs dfs -mkdir -p, -put, -ls y -cat, y distinguió esas operaciones de HDFS del comando local cat y la redirección de salida del shell. A continuación, explorará cómo el cliente de Hadoop encuentra HDFS y cómo se relacionan el almacenamiento y el cálculo.