Está en la página 1de 12

Práctico 1 - Hadoop

Introducción 2
Acceso SSH 2
Probando comandos básicos de linux 2
¿Dónde estamos? 2
¿Qué hay dónde estoy parado? 2
¿Cómo nos movemos hacia otro directorio? 2
Comenzando con Hadoop 3
Servicios 3
Interfaz gráfica 4
YARN 5
Componentes 5
Funcionamiento 5
Interfaz gráfica 6
Interactuando con HDFS 7
Trabajando con HDFS 8
Tarea 11
Ejercicio 1: 11
Ejercicio 2: 11
Introducción
IMPORTANTE! Iniciar el ambiente creado en Azure y recordar detenerlo al terminar de
trabajar.

Acceso SSH
Conectarse al ambiente mediante SSH. Para esto se puede usar Azure Cloud Shell
(https://portal.azure.com/#cloudshell), tiene la ventaja de que se puede utilizar desde
cualquier navegador web y también permite la carga/descarga de archivos.

Otras alternativas, pensando en herramientas de escritorio, pueden ser por ejemplo


MobaXterm o Putty (para windows) y Remmina, en el caso de linux.
También existen herramientas complementarias para la transferencia de archivos como
FilleZilla o WinSCP.

Probando comandos básicos de linux


Todos los comandos básicos de linux, sirven para moverse en la máquina.

¿Dónde estamos?
>pwd
/home/ort

¿Qué hay dónde estoy parado?


>ls -ltr

¿Cómo nos movemos hacia otro directorio?


>cd <ruta a donde quiero moverme>

Ejemplo
>cd hadoop

Y para volver atrás una carpeta


>cd ..
Comenzando con Hadoop
Servicios
Cada vez que se inicia la VM en Azure, se levantan por defecto una serie de servicios que
se corresponden con las herramientas que vamos a utilizar durante este curso.
Para consultar el estado de cualquier servicio se utiliza el comando:

systemctl status <nombre-del-servicio>

Por ejemplo:

Y para salir Ctrl + c.

Ya chequeado el correcto estado del servicio hadoop, otro comando útil a tener en cuenta
es “jps”, para ver que procesos de java están activos con los id de cada uno.

Como se puede observar, ya están corriendo los procesos que se corresponden a hdfs:
NameNode, SecondaryNameNode y DataNode.
Interfaz gráfica
Tenemos disponible una interfaz gráfica de Hadoop. Para poder ingresar, en un explorador
de internet escribimos http://hdfs.bigdata.ort.edu.uy. Deberíamos ver lo siguiente:

Si vamos a la pestaña DataNodes, veremos que nuestro NameNode, está funcionando


también como DataNode. Si levantamos 3 máquinas virtuales más, podríamos tener un
clúster con el factor de replicación 3 que viene por defecto, replicando efectivamente en
máquinas separadas.

Datanode Volume Failures, muestra si hubieron fallas.

En Snapshot veríamos todos los respaldos que se han hecho al cluster.

Si vamos a Utilities > Browse the file system, accedemos a una interfaz gráfica donde
podemos ver todos los archivos que están subidos al cluster.
YARN
Yet Another Resource Negotiator es un distribuidor de datos y gestor de recursos
distribuidos. Forma parte de Hadoop desde la versión 2, y abstrae la gestión de recursos de
los procesos MapReduce lo que implica una asignación de recursos más efectiva. YARN
soporta varios frameworks de procesamiento distribuido, como MapReduce v2, Tez, Impala,
Spark, etc..

El objetivo principal de YARN es separar en dos servicios las funcionalidades de gestión de


recursos de la monitorización/planificación de tareas. Por un lado, un gestor de los procesos
que se ejecutan en el clúster, que permite coordinar diferentes aplicaciones, asignar
recursos y prioridades, permitir su convivencia, etc. Y por otro lado, las aplicaciones, que
pueden desarrollarse utilizando un marco de ejecución más ligero, no atado a un modelo
estricto sobre cómo ejecutarse, lo que da más libertad para poder desarrollar las
aplicaciones.

Componentes

Se divide en tres componentes principales: un Resource Manager, múltiples Node Manager


y varios ApplicationMaster. La idea es tener un Resource Manager por clúster y un
Application Master por aplicación, considerando una aplicación tanto un único job como un
conjunto de jobs cíclicos.

● El Resource Manager y el Node Manager componen el framework de computación


de datos. En concreto, el ResourceManager controla el arranque de la aplicación,
siendo la autoridad que orquesta los recursos entre todas las aplicaciones del
sistema. A su vez, tendremos tantos NodeManager como datanodes tenga nuestro
clúster, siendo responsables de gestionar y monitorizar los recursos de cada nodo
(CPU, memoria, disco y red) y reportar estos datos al Resource Manager.
● El Application Master es una librería específica encargada de negociar los recursos
con el ResourceManager y de trabajar con los Node Manager para ejecutar y
monitorizar las tareas.

Funcionamiento

1. El cliente envía una aplicación YARN.


2. Resource Manager reserva los recursos en un contenedor para su ejecución.
3. El Application Manager se registra con el Resource Manager y pide los recursos
necesarios.
4. El Application Manager notifica al Node Manager la ejecución de los
contenedores. Se ejecuta la aplicación YARN en el/los contenedor/es
correspondiente.
5. El Application Master monitoriza la ejecución y reporta el estado al Resource
Manager y al Application Manager.
6. Al terminar la ejecución, el Application Manager lo notifica al Resource
Manager.
Interfaz gráfica
En otra pestaña del explorador de internet abrimos http://yarn.bigdata.ort.edu.uy/
Aquí vamos a poder ver la interfaz gráfica del resource manager, y todas las tareas de
mapreduce que se estén ejecutando.

En Active Nodes podemos ver que solo tenemos 1 servidor a disposición.

En Memory total vamos a ver los 8GB de memoria que le dimos a la máquina virtual. A
medida que agreguemos más máquinas al clúster, vamos a tener más memoria disponible,
sumando la memoria de todos los nodos.

En el Menú lateral podemos ver todos los estados que puede tener un trabajo de
mapreduce. Si por ejemplo hay uno que está corriendo y queremos observar su proceso,
podemos ir a running a ver como va evolucionando.

Si vamos al Scheduler, podemos ver la cola de tareas que se van a ejecutar. Por defecto
tenemos la Queue default dentro de root.
Interactuando con HDFS
Para interactuar con el sistema de ficheros de Hadoop se utiliza el comando dfs, el cual
requiere de otro argumento (empezando con un guión) el cual será uno de los comandos
Linux para interactuar con el shell (consultar la lista de comandos en la documentación
oficial).
hdfs dfs -comandosLinux

Por ejemplo, para mostrar todos los archivos que tenemos en el raíz haríamos:

hdfs dfs -ls


Los comandos más utilizados son:
● put (o copyFromLocal): Coloca un archivo dentro de HDFS
● get (o copyToLocal): Recupera un archivo de HDFS y lo lleva a nuestro sistema host.
● cat / text / head / tail: Visualiza el contenido de un archivo.
● mkdir / rmdir: Crea / borra una carpeta.
● count: Cuenta el número de elementos (número de carpetas, ficheros, tamaño y
ruta).
● cp / mv / rm: Copia / mueve-renombra / elimina un archivo.
Trabajando con HDFS
Primero ejecutamos el siguiente comando: echo $HADOOP_HOME

Vemos que en la variable de entorno HADOOP_HOME, está guardado el directorio donde


está instalado Hadoop.

Nos movemos a ese directorio: cd $HADOOP_HOME


Comprobamos que nos movimos ahí con el comando pwd que debería tener el mismo
output que echo $HADOOP_HOME.
Utilizo el comando ls para ver los archivos dentro del directorio. Ubicar si está el archivo
NOTICE.txt.

Voy a subir ese archivo al HDFS.

Creo dentro del hdfs una carpeta a la cual voy a llamar taller. Para eso ejecuto:
hdfs dfs -mkdir /taller
Ahora puedo ver en la interfaz gráfica de Hadoop que existe ese nuevo directorio.

También puedo ejecutar el siguiente comando por consola para ver que hay dentro del
HDFS:
hdfs dfs -ls /
Ahora voy a subir el NOTICE.txt de la máquina virtual, al HDFS que está desplegado en esa
misma máquina, cambiando el nombre del archivo en el proceso

hdfs dfs -copyFromLocal NOTICE.txt /taller/test.txt

Preguntas a entregar: ¿De qué dos formas podemos ver ese archivo? ¿Qué factor de
replicación tiene?

Ahora vamos a ejecutar un MapReduce.


En los inicios de Hadoop para ejecutar un mapreduce, debía hacerse un programa con Java
que hacía el mapeo y la reducción, y escribía el resultado en donde se le indicará. Vamos a
replicar un ejemplo de ese estilo.

El archivo .jar que vamos a utilizar, se encuentra en


$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar
Podemos verlo con:

ls $HADOOP_HOME/share/hadoop/mapreduce/

Vamos a realizar un word count sobre el archivo test.txt que dejamos en el HDFS.
El comando es el siguiente (es una sola línea):

$HADOOP_HOME/bin/yarn jar
$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar
wordcount /taller/test.txt /outmapreduce

Sí rápidamente vamos al resource manager, podemos llegar a ver en el scheduler las tareas
que se están ejecutando.

Si vamos al Browser, podemos ver que tenemos la carpeta outmapreduce.

Entramos a la carpeta y vamos a ver dos cosas. Primero un archivo de SUCCESS que
indica si el proceso de mapreduce se ejecutó o no correctamente. Y luego vamos a ver que
hay una única partición del archivo, por lo que solo tengo un bloque de archivo. Ambos
archivos tienen un factor de replicación de 1.
Si queremos bajar ese, lo copiamos a la VM desde hdfs con el comando (creando
previamente la carpeta ‘out’ local):

hdfs dfs -copyToLocal /outmapreduce/* /home/ort/out

El archivo baja a nuestra máquina. Podemos darle una extensión, por ejemplo .txt. O dejarlo
así. Abrimos con un editor de texto y podemos ver la cantidad de palabras que hay en el
archivo test.txt, y cuántas veces están presentes. El split está hecho con el espacio, por lo
tanto puede aparecer la misma palabra contada como una palabra distinta.

Pregunta a entregar: ¿Cuántas veces está la palabra ‘cryptographic’?

Para poder ver el código fuente del .jar, pueden entrar a:


https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-
core/MapReduceTutorial.html

Para hacer Mapreduce, ya no es necesario hacer una aplicación de este tipo. Con HIve,
podemos convertir las sentencias de HiveQL, de sintaxis similar a SQL, en instrucciones de
Mapreduce. Con Spark, podemos convertir sentencias con sintaxis SQL, o scripts de Scala
o Python en instrucciones de Mapreduce.
Tarea
Armar un archivo .doc o .pdf contestando las preguntas que aparecen en negrita.
Además de los ejercicios propuestos en este apartado.

Ejercicio 1:
¿Sabes qué realiza cada uno de los siguientes comandos?

● hdfs dfs -mkdir /user/ort/data


● hdfs dfs -put ejemplo.txt /user/ort/data/
● hdfs dfs -put ejemplo.txt /user/ort/data/ejemploRenombrado.txt
● hdfs dfs -ls /datos
● hdfs dfs -count /datos
● hdfs dfs -mv /datos/ejemploRenombrado.txt /user/ort/data/otroNombre.json
● hdfs dfs -get /datos/otroNombre.json /tmp

Ejercicio 2:
● Crear Directorios (donde dice num_estudiante poner su número de estudiante):

/Practico_1/num_estudiante/books/
/Practico_1/num_estudiante/output_mapreduce

Debe crear estos directorios en el HDFS, no en el servidor CentOS

● Descargar archivos de Gutenberg.


El Proyecto Gutenberg fue desarrollado por Michael Hart en 1971 con el fin de crear una
biblioteca de libros electrónicos gratuitos a partir de libros que ya existen físicamente. Estos
libros electrónicos se encuentran disponibles desde entonces en Internet. Son gratuitos.

wget http://www.gutenberg.org/cache/epub/20417/pg20417.txt -q -O book1.txt


wget http://www.gutenberg.org/files/5000/5000-8.txt -q -O book2.txt
wget http://www.gutenberg.org/files/4300/4300-0.txt -q -O book3.txt

● Cargar archivos desde el filesystem del sistema a Hadoop. Para eso debe utilizar el
comando copyFromLocal visto en esta práctica. Debe cargarlos al directorio que
creó:

/Practico_1/num_estudiante/books/

El siguiente comando debería mostrarle que realizó los pasos anteriores de forma
corrercta:
hdfs dfs -ls /Practico_1/num_estudiante/books
● Ejecutar mapreduce para hacer un word count sobre los tres libros, utilizando el
siguiente comando. Recuerde que donde dice num_estudiante, va su número de
estudiante.

$HADOOP_HOME/bin/yarn jar
$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar
wordcount /Practico_1/num_estudiante/books/*.txt
/Practico_1/num_estudiante/output_mapreduce/global_output

● ¿Cuántas veces aparece la palabra ‘grand’?

Adjunte al pdf una captura de pantalla donde aparezca el output del mapreduce en el
browser.

Ejemplo:

Y una por consola así:

Entregar el archivo en aulas con nombre del estudiante, grupo al cuál pertenece, y nombres
y apellidos.

Cualquier duda puede ser consultada por Teams.

Gracias.

También podría gustarte