Laboratorio de Hadoop: HDFS y MapReduce, con un archivo que subir y un conteo de palabras que leer

Este laboratorio da a cada alumno un pequeño clúster Hadoop propio: HDFS, el sistema de archivos distribuido, con un NameNode y un DataNode, y YARN, con un ResourceManager y un NodeManager, para ejecutar trabajos MapReduce. Al arrancar, el clúster ejecuta el conteo de palabras de Hadoop sobre una frase de ejemplo; el alumno sube un archivo suyo a HDFS, lo lista, lo lee y lee el conteo de palabras.

Es la imagen del propio proyecto Apache, ejecutada sin modificar, así que no hay nada vulnerable que atacar: solo un sistema que explorar. La copia del laboratorio no tiene salida a internet ni a ningún otro alumno.

Qué aprenden los alumnos

Cómo almacena y procesa los datos un sistema de datos masivos. Un archivo lo guardan dos clases de máquina: el NameNode, que sabe qué bloques forman qué archivo, y el DataNode, que guarda los bytes. Escribir un archivo son dos peticiones, el NameNode eligiendo un DataNode y el DataNode recibiendo los datos, y el alumno lo ve por sí mismo con curl. Después lee la salida de un conteo de palabras MapReduce, una línea por palabra con las veces que aparece, y ve el trabajo listado como terminado en YARN. Encaja en unidades de datos, nube, big data y sistemas distribuidos; comprueba en tu propio organismo la redacción exacta de la unidad.

Ejecútalo en tu navegador

El laboratorio tiene cinco servicios: namenode, datanode, resourcemanager, nodemanager y client. El terminal del laboratorio no tiene el comando hadoop: habla con HDFS por HTTP con curl. WebHDFS está en http://namenode:9870/webhdfs/v1/ y la lista de trabajos en http://resourcemanager:8088/ws/v1/cluster/apps. Al arrancar, el clúster contó las palabras de una frase de ejemplo y dejó el resultado en /user/lab/wordcount-out; ese no lo lanza el alumno. Para ejecutar un trabajo MapReduce sobre su propio archivo usa docker exec client hadoop jar en el terminal, porque el servicio client es donde está el comando hadoop. No se guarda nada al detener el laboratorio, y tarda alrededor de un minuto en arrancar.

  1. Abre la página Contenedor. Abre «Crear» en la barra y elige «Ejecutar un contenedor». Cualquiera puede abrir la página, y el laboratorio de Git y el de SQL se inician sin cuenta. Todos los demás laboratorios necesitan una cuenta gratuita: crea una, inicia sesión y pulsa «Iniciar».
  2. Busca el laboratorio. La tarjeta «Laboratorios de ejemplo» lista todos los ejemplos. Busca Hadoop: HDFS and MapReduce.
  3. Pulsa «Iniciar». «Iniciar» lo ejecuta tal cual, con una sola pulsación. «Editar el archivo primero» abre el archivo compose para que lo cambies antes de iniciarlo.
  4. Ábrelo. En la página del laboratorio, la barra del laboratorio tiene dos enlaces, HDFS NameNode, the page that lists every file, y YARN ResourceManager, the page that lists the jobs. En la página del NameNode elige Utilities, después Browse the file system, y abre /user/lab. En el terminal junto al laboratorio, curl http://namenode:9870/webhdfs/v1/user/lab/input?op=LISTSTATUS lista la misma carpeta, y curl -L con op=OPEN sobre /user/lab/wordcount-out/part-r-00000 muestra el conteo de palabras.

Qué pedir a los alumnos que entreguen

La ruta de un archivo que hayan subido a HDFS, las líneas del conteo de palabras que MapReduce hizo con él y una frase sobre qué hacen el NameNode y el DataNode. Cada alumno puede elegir su propio texto, así que las respuestas difieren. Para un trabajo más exigente, pregunta por qué un archivo se lee con dos peticiones, y por qué un clúster real guarda tres copias de cada bloque cuando este guarda una.

Nada se califica automáticamente. Conviene decir en voz alta los límites del laboratorio: tiene un solo DataNode y un solo NodeManager, así que muestra cómo se organiza Hadoop pero no cómo sobrevive a la caída de una máquina ni cómo acelera un trabajo grande, y los permisos están desactivados.

Una lección básica en este laboratorio

Hadoop Basics es una lección breve hecha en este laboratorio, con cada paso explicado y un botón Run que escribe su comando en el terminal del alumno. Sube a HDFS con curl un archivo de una frase, lo lista y lo lee, y después lee el conteo de palabras que hizo el clúster y pregunta al ResourceManager cómo fue el trabajo.

Una cuenta personal gratuita la recibe en el módulo Basics, que está en Inicio, cada centro puede copiarla de la carpeta Basics de la Biblioteca, y un centro nuevo la tiene en un módulo llamado Lab Basics (Sample). Es deliberadamente breve: muestra a un profesor qué es una lección hecha en un laboratorio, y el laboratorio hace el resto. Cópiala en un módulo tuyo para cambiarla.

El código en GitHub

El archivo compose ejecuta cinco veces una imagen pública, apache/hadoop fijada en 3.4.1 y sin modificar. Apache Hadoop tiene licencia Apache 2.0, y nosotros no lo distribuimos. Cada servicio escribe su configuración al arrancar, los heaps están reducidos al mínimo y el trabajo se ejecuta como un único trabajo pequeño, de modo que una copia cabe en la memoria de la plataforma. La prueba del repositorio recorre el laboratorio como un alumno, incluido un archivo escrito, leído y contado, con los mismos límites que aplica la plataforma.

Asígnalo como trabajo

Indica en la tarea qué archivo subir a HDFS y qué entregar.

  1. Crea el laboratorio. En tu módulo añade una tarea y elige la tarjeta «Laboratorio de contenedores», y después «En un repositorio de GitHub». Indica https://github.com/mitsurutech/lab-hadoop con la rama main. El archivo compose es el predeterminado, compose.yaml. Haz un fork del repositorio antes si quieres modificarlo.
  2. Publica y pruébalo. «Publicar» fija el commit que te mostraron, así que un cambio posterior en el repositorio no altera un laboratorio que ya has asignado. Inicia primero tu propia copia.
  3. Asígnalo. Asígnalo como cualquier tarea, con una fecha de entrega si quieres, e indica en la tarea qué hacer y qué entregar.
  4. Califica lo entregado. Abre la copia de un alumno y el trabajo que ha entregado, califícalo y devuélvelo con un motivo si necesita más.

Preguntas frecuentes

¿Por qué no puedo leer un archivo en la página del NameNode?
La página del NameNode lista los archivos y las carpetas, pero los bytes de un archivo están en el DataNode, y el navegador es enviado allí para leerlos, algo que una copia del laboratorio no abre. Lee el archivo con curl -L y op=OPEN en el terminal: el -L sigue la redirección del NameNode hacia el DataNode.
¿Se conservan los archivos cuando se detiene el laboratorio?
No. HDFS guarda sus datos dentro de los contenedores del laboratorio, así que un laboratorio detenido vuelve a empezar vacío y el conteo de palabras de ejemplo se ejecuta de nuevo. Pide a los alumnos que entreguen lo que hicieron antes de detenerlo.
¿El laboratorio de Hadoop califica automáticamente el conteo de palabras?
No. Nada se califica automáticamente: pide a los alumnos que entreguen la ruta del archivo que subieron a HDFS y las líneas del conteo de palabras hecho con él. Una frase sobre qué hacen el NameNode y el DataNode muestra si lo han entendido.