Instalación paso a paso de Hadoop en Linux y un ejemplo de uso

Esta es una guía sencilla, que explica paso a paso como instalar y ejecutar Hadoop en una máquina Linux.

Si ya tienes instalado Hadoop, quizás te interese: Creación y ejecución de un programa Python para Hadoop Map Reduce en Linux

En primer lugar instalamos Java, ya que Hadoop se ejecuta sobre este lenguaje. Para el ejemplo utilizaremos la consola de CentOS pero también es válido para Ubuntu o Linux Mint. Como primer paso nos logeamos como usuario root:

su -

Si no tienes contraseña de root creada, puedes usar este comando:

sudo su

Ahora procedemos a instalar Java:

yum install java-1.8.0-openjdk-devel

Podemos comprobar que la instalación se ha realizado correctamente viendo la versión de Java instalada:

java -version

Debe salirnos algo como esto:

Descargamos Hadoop desde la siguiente página:

https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz

En este caso estamos descargando el binario de la versión 2.8.5, pero puede ser otra versión a tu elección:

Se trata, como se puede observar, de un fichero comprimido que hay que descomprimir. Podemos descomprimirlo desde la consola entrando primero en la carpeta donde se halle el archivo. Si por ejemplo éste se hallase en el Escritorio, en primer lugar se saldría del usuario root:

exit

Y en segundo lugar entraría en la carpeta Escritorio (Desktop si lo tenemos en inglés):

cd Escritorio

Ahora podemos descomprimir con el siguiente comando:

tar xzf hadoop-2.8.5.tar.gz

Esto nos creará una nueva carpeta con el contenido descomprimido. Ahora vamos a mover esa carpeta recién creada con el siguiente comando, y para ello debemos volver a ser usuario root:

sudo su
mv hadoop-2.8.5 /usr/local/

Está será la localización dónde instalaremos Hadoop. Ahora volvemos a salir de usuario root:

exit

Ahora creamos unas claves SSH sin contraseña, para que Hadoop realice conexiones con servidores y consigo mismo de forma automática:

ssh-keygen -t rsa -P ""

Le damos a ENTER cuando nos pregunte por el archivo dónde guardar la clave sin escribir nada (la opción por defecto nos sirve perfectamente).

Ahora vamos a indicarle que la clave pública creada la vamos a introducir dentro de las claves autorizadas:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Nota: el símbolo virgulilla en Linux se escribe con “Alt Gr + 4”, mientras que en Windows es “Alt + 126”.

Lo siguiente es eliminar todos los permisos que hubiésemos tenido en authorized_keys:

chmod -R go= ~/.ssh

Ahora hacemos que la capeta ssh pertenezca a nuestro a usuario:

chown -R usuario:usuario ~/.ssh/

Debemos sustituir en el código anterior la palabra “usuario” por nuestro nombre de usuario en la máquina Linux, que será el hombre que sale en la misma línea de comandos de la terminal antes del símbolo @.

Ahora realizamos una conexión SSH con nosotros mismos, con la máquina localhost:

ssh localhost

Si te falla el comando anterior y te da un error del tipo “port 22: Connection refused” prueba con el siguiente código:

sudo apt-get update
sudo apt-get install openssh-server
sudo ufw allow 22

Ya estamos conectados con nosotros mismos a través de SSH, que es lo que va a hacer Hadoop. Una vez que hemos comprobado que la conexión es correcta la cerramos:

exit

Una vez configurado el SSH, vamos a definir la variables de entorno que vamos a necesitar para ejecutar Hadoop. Vamos a comprobar dónde está Java instalado:

which javac

El resultado debe ser algo parecido a esto:

Vemos hacia dónde nos redirige con el siguiente código:

readlink -f /usr/bin/javac

El resultado debe ser algo similar a esto:

Nos quedamos especialmente con la ruta que hay justo antes del “/bin/javac” final, ya que la necesitaremos después, así que la seleccionamos y hacemos un Shift+Ctrl+C.

Ahora indicamos en qué carpeta está Java y en qué carpeta está Hadoop modificando el fichero bashrc:

gedit ~/.bashrc

Si no te funciona el comando gedit es que necesitas instalarlo previamente con el siguiente comando en CentOS:

sudo yum install gedit

En Linux Mint o Ubuntu sería:

sudo apt install gedit

Esto nos abrirá el fichero bashrc con el editor de texto gedit. Nos vamos al final del documento y escribimos las siguientes líneas, indicando dónde se encuentran instalados Java y Hadoop tal como hemos visto anteriormente. El último export es solo para simplificar la ruta de acceso a Hadoop:

export HADOOP_HOME=/usr/local/hadoop-2.8.5
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
export PATH=$PATH:$HADOOP_HOME/bin

En mi caso el fichero bashrc editado queda de la siguiente forma (recuerda escribir el nuevo código al final del documento):

Para actualizar en la terminal la configuración que acabamos de introducir escribirnos los siguiente:

source ~/.bashrc

Procedemos ya a configurar Hadoop con todo lo que necesitemos:

gedit $HADOOP_HOME/etc/hadoop/hadoop-env.sh

Aquí simplemente comprobamos que Hadoop ejecutará Java en la localización que ya le hemos indicado. Debe existir una línea de la siguiente forma:

export JAVA_HOME=${JAVA_HOME}

Si es correcta no necesitamos hacer nada más y cerramos el fichero. Comprobamos que Hadoop está correctamente instalado:

hadoop version

Nos debe dar un resultado similar a este:

Vamos a ejecutar un primer comando en Hadoop para ver si va todo correctamente. Para ello nos movemos al escritorio y creamos una nueva carpeta y un archivo de datos:

cd Escritorio
mkdir entradaWordCount
touch ./entradaWordCount/entrada1

Vamos a crear un programa en Hadoop que cuente las palabras que hay en ese archivo. Para ello nos vamos a la carpeta creada en el escritorio, lo abrimos con doble click, escribimos cualquier texto y guardamos. En mi caso ha quedado así:

Mike Oldfield – Five Miles Out (1982)

En este caso usaremos un programa nativo de Hadoop llamado WordCount en el que usaremos Hadoop Map Reduce. Cada mapper en este caso recibirá cada una de las líneas y emitirá a los reducer todas las palabras presentes junto a un número que indica la veces que se repite cada palabra. Reducer suma todos los números y calcula el total.

Ejecutamos el programa:

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount ./entradaWordCount/entrada1 ./salidaWordCount

El código anterior, en primer lugar especifica la ruta y el programa de Hadoop a utilizar (wordcount), luego el archivo de entrada y por último el archivo de salida que creará el propio Hadoop.

Al ejecutarlo obtenemos un resultado en pantalla que nos da información interesante sobre el proceso de Map Reduce:

Map input records=64” indica que Map recibió 64 entradas, que son las 64 líneas del texto. Por cada una de las líneas de entrada fue a un Map. Con esas entradas, se generaron “Map output records=292” salidas, es decir, 292 claves-valor o palabras que hay en el documento. “Clave” seria cada palabra en la frase y “valor” es un número que indica las veces que se repite dicha palabra en la frase.

Combine input records=292” y “Combine output records=127” indica que el combiner ha reducido la información transmitida desde el mapper el reducer de 292 a 127. Por último “Reduce input records=127” son las 127 palabras que ha recibido el reducer que también son la salida.

Si accedemos al escritorio de nuevo, veremos una nueva carpeta llamada salidaWordCount con un fichero dentro llamado part-r-00000 dónde viene listado la cuenta de palabras. Hadoop crearía un fichero de salida por cada reducer empleado, pero dado que solo tenemos un servidor y un fichero con pocos datos, Hadoop solo ha creado un reducer para la operación.

El resultado obtenido en el fichero part-r-00000 es el siguiente:

"Victor-Juliet, 1
'Emergency'!"   1
(Climbing,      7
(Got    1
1,      2
18!     1
18,     1
24      1
30      1
And     3
Automatic,      1
CU.NIMB...icing,        1
Calling 1
Climbing        5
Coming  1
Communicate     1
Don't   2
Five    5
Golf-Mike-Oscar-Victor-Juliet   1
Got     8
I       1
IMC     1
In      1
Just    8
Lost    1
Mayday! 3
Number  2
Our     1
Push    2
Rider   1
The     2
There's 1
This    1
Trapped 1
Welcome's       1
What    1
You'll  1
You're  2
You've  1
Your    1
a       2
again!  2
all     1
and     3
anticipating    3
are     1
band    2
be      1
beacon; 1
blades  1
blue.   1
braking.        1
calling,        1
celebrating,    1
climbing)       7
closing 1
controller      1
crack   1
dark    1
degrees 1
difficulty,     1
dive    2
do      2
down    1
evil    1
eye     1
falling,        1
finest  8
for     1
get     8
got     1
great   1
have    1
heading 8
hell!   1
hold    8
hope's  1
hurricane's     1
identity.       1
in      7
is      3
it's    1
kill.   1
living  1
lost    1
miles   6
now     1
now.    1
of      4
or      1
out,    4
out.    9
out.... 6
out?    1
over.   1
prisoner        1
propeller       1
push    1
rain!   2
sky     1
sky,    1
squawk  1
stalling        1
static, 1
stations!       1
still!  1
storm   1
storm!  1
take    2
that    4
the     9
through 2
through!)       1
to      10
traffic 1
true.   8
violent 1
waiting,        1
warning's       1
we're   1
when    2
with    1
you     2
you're  2
you,    1
you.    2
your    19
Para saber más:
¿Cómo instalar Apache Hadoop?
Hadoop – Configuración Entorno.
Primeros pasos con Hadoop: instalación y configuración en Linux.

3 comentarios en “Instalación paso a paso de Hadoop en Linux y un ejemplo de uso”

Responder a Lía Cancelar la respuesta