¿Cómo instalar Apache Hadoop?

Apache Hadoop LogoA continuación vamos a ver qué es Apache Hadoop y los pasos necesarios para instalar Apache Hadoop en una máquina con sistema operativo Ubuntu Linux. Apache Hadoop es un framework de software que soporta aplicaciones distribuidas. Permite desarrollar aplicaciones que tengan que trabajar con miles de nodos y petabytes (Mil Terabytes o un millón de Gigabytes) de datos.
Está desarrollado con el lenguaje de programación Java y está inspirado en documentos Google para MapReduce y el sitema de archivos de Google (GFS – Google File System).

Hadoop consiste básicamente en el paquete Hadoop Common, que contiene los archivos y scripts necesarios para hacer que Hadoop funcione.

Utiliza Hadoop Distributed File System (HDFS), un sistema de archivos distribuido, escalable y portátil desarrollado para el framework Hadoop.

Para más información sobre Apache Hadoop, se puede visitar el siguiente enlace: Wikipedia. Para más información sobre cómo instalar Apache Hadoop se puede visitar la Pagina Oficial (en inglés).

A continuación se mostrarán los pasos que hay que seguir para instalar Apache Hadoop en una intalación de un «clúster» pseudo-distribuido en un sólo nodo con HDFS sobre una máquina con Ubuntu Linux.

Requisitos Previos

Puesto que está desarrollado en Java, para trabajar con él es necesario tener instalado Java JDK (como mínimo, la versión 1.5), así como tener instalado ssh.

Instalar Java JDK

Como paso previo necesita que esté instalado el JDK de Java (versión 1.5 o más) para funcionar. En caso de no tenerlo instalado en el equipo, se puede instalar el JDK de Java ejecutando los siguientes comandos.

sudo apt-get update
sudo apt-get install default-jdk

Esto instalará la última versión del JDK de Java disponible en el repositorio de aplicaciones de Ubuntu.

Para comprobar que se ha instalado correctamente y ver que versión se ha instalado, podemos ejecutar el siguiente comando.

java -version

Devuelve un mensaje por pantalla parecido a este:

java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

Configurar el acceso SSH

Para realizar la gestión de los nodos, necesitaremos acceso ssh. Por ello, hay que hacer la configuración del acceso ssh antes de instalar Apache Hadoop.

En caso de no tener instalado ssh, bastará con ejecutar los siguientes comandos.

sudo apt-get update
sudo apt-get install ssh

Para configurar el acceso ssh del usuario hduser a localhost, lo primero que hay que hacer es conectarse al sistema como el usuario hduser.

su - hduser

A continuación, hay que generar una clave SSH con contraseña vacía para el usuario hduser.

ssh-keygen -t rsa -P ""

El sistema preguntará por la ruta y el nombre del fichero que contendrá la clave ssh, a lo que se le puede indicar: /home/hduser/.ssh/id_rsa

El hecho de crear la clave ssh sin contraseña es necesario para poder desbloquear la clave sin necesidad de interacción por parte de un usuario cada vez que se conecta a un nodo.

Una vez creada la clave ssh, hay que habilitar el acceso SSH a la máquina local utilizando dicha clave.

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

Para probar que se ha configurado correctamente el acceso SSH, nos conectaremos a la máquina local.

ssh localhost

En caso de haber algún problema en la conexión, se puede lanzar de nuevo el comando en modo debug para poder investigar el motivo por el que se produce el error.

ssh -vvv localhost

También conviene revisar la configuración del servidor SSH del fichero /etc/ssh/sshd_config, especialmente la opción PubkeyAuthentication (que debe tener el valor yes) y AllowUsers (Si está activa, añadir el usuario hduser). Si se realizan cambios en el fichero, hay que recargar la configuración con el siguiente comando.

sudo /etc/init.d/ssh reload

Una vez que ya está todo bien configurado, y ha podido conectarse correctamente a localhost, puede volver a salir ejecutando el siguiente comando.

exit

Desactivar IPv6

Uno de los problemas de utilizar IPv6 en Ubuntu es que utilizando la dirección IP 0.0.0.0 en la configuración de varios Hadoop relacionados provoca que Hadoop mapee las direcciones IPv6. Como no es necesario tener esto activo a menos que esté conectado a una red IPv6, conviene desactivarlos antes de instalar Apache Hadoop.

Para desactivar IPv6 en Ubuntu Linux 14.04 LTS basta con abrir el fichero /etc/sysctl.conf y añadir las siguientes líneas al final del fichero.

# disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Para que los cambios se apliquen, hay que reiniciar el sistema. Una vez reiniciado, se puede comprobar si se ha desactivado correctamente IPv6 ejecutando el siguiente comando.

cat /proc/sys/net/ipv6/conf/all/disable_ipv6

Esto devuelve uno de estos valores: 0 si IPv6 está activo, o 1 si está desactivado.

Alternativa

Si solo queremos desactivar el uso de IPv6, podemos hacerlo añadiendo lo siguiente en el fichero /usr/local/hadoop/etc/hadoop/hadoop-env.sh.

export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

Por defecto, esto suele venir ya configurado así al instalar Apache Hadoop versión 2.6.0.

Crear usuario para Hadoop

Lo primero que hay que hacer es crear un grupo de usuarios al que pertenecerá el usuario:

sudo addgroup hadoop

Crear usuario y asignarlo al grupo que se ha creado anteriormente.

sudo adduser --ingroup hadoop hduser

El sistema pedirá que se introduzcan algunos datos sobre el usuario así como una contraseña de acceso.

Añadir el usuario creado al grupo sudo para que, al instalar Apache Hadoop, se pueda ejecutar aplicaciones en modo administrador.

sudo adduser hduser sudo

Instalar Apache Hadoop Common

Para descargar el paquete Apache Hadoop Common hay que entrar en la página oficial de Apache Hadoop (http://hadoop.apache.org/) y seleccionar la versión que se quiere descargar. En este caso, vamos a instalar Apache Hadoop 2.6.0, por lo que hay que descargar esta versión del paquete Apache Hadoop Common.

Desde el siguiente enlace se puede descargar el fichero: hadoop-2.6.0.tar.gz

Descomprimir el fichero tar que hemos descargado. Para ello, ejecutar el siguiente comando desde un terminal:

tar -xzf hadoop-2.6.0.tar.gz

Una vez descomprimido, mover los archivos a su ubicación en /usr/local:

sudo mv hadoop-2.6.0/ /usr/local

Ahora hay que crear un enlace simbólico a la carpeta que contiene los ficheros:

cd /usr/local/
sudo ln -s hadoop-2.6.0/ <nombre_directorio>

De esta forma se puede hacer referencia directamente a hadoop sin necesidad de tener que hacer referencia a la versión que está utilizando.

whereis hadoop

Lo que devuelve un mensaje por pantalla parecido al siguiente.

hadoop: /usr/local/<nombre_directorio>

Faltaría establecer la variable de entorno HADOOP_HOME:

export HADOOP_HOME=/usr/local/<nombre_directorio>

Cambiar el usuario propietario de los archivos de Hadoop Common instalados.

sudo chown -R hduser:hadoop /usr/local/hadoop-2.6.0

Configurar Apache Hadoop

Una vez instalado Apache Hadoop, sólo faltaría realizar la configuración. En esta sección vamos a ver los pasos necesarios para configurar Apache Hadoop para que funcione como un «clúster» de un sólo nodo. Para más información sobre cómo configurarlo se puede visitar la Apache Wiki (Inglés).

Lo primero que hay que hacer es ver si hemos hecho correctamente todos los pasos anteriores. Para ello basta con ejecutar el siguiente comando:

/usr/local/<nombre_directorio>/bin/hadoop version

Esto devuelve un mensaje por pantalla parecido a este:

Hadoop 2.6.0
...
This command was run using /usr/local/hadoop-2.6.0/share/hadoop/common/hadoop-common-2.6.0.jar

A continuación hay que configurar el directorio donde Hadoop va a guardar los archivos de datos, para lo cual hay que crear primero un directorio.

mkdir /usr/local/<nombre_directorio>/data

Asignar al usuario hduser como propietario de la carpeta.

sudo chown hduser:hadoop /usr/local/<nombre_directorio>/data

Para reforzar la seguridad de los datos, se pueden modificar los permisos de la carpeta.

sudo chmod 750 /usr/local/<nombre_directorio>/data

Si no se establecen bien los permisos el sistema nos devolverá un error cuando se intente formatear el nodo (java.io.IOException).

Ahora hay que editar una serie de ficheros de configuración.

Editar el fichero $HADOOP_HOME/etc/<nombre_directorio>/hadoop-env.sh:

Completar los valores de estas variables de entorno.

# set to the root of your Java installation
export JAVA_HOME=/usr/java/latest
# Assuming your installation directory is /usr/local/hadoop
export HADOOP_PREFIX=/usr/local/<nombre_directorio>

Editar el fichero $HADOOP_HOME/etc/<nombre_directorio>/core-site.xml:

Insertar las siguientes líneas dentro de las etiquetas <configuration> </configuration>.

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
    <description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation.</description>
</property>

Editar el fichero $HADOOP_HOME/etc/<nombre_directorio>/hdfs-site.xml:

Insertar las siguientes líneas entre las etiquetas <configuration> </configuration>:

<property>
    <name>dfs.replication</name>
    <value>1</value>
    <description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.</description>
</property>

Editar el fichero $HADOOP_HOME/etc/<nombre_directorio>/mapred-site.xml:

Es muy posible que este fichero no exista, por lo que hay que crearlo haciendo una copia del fichero $HADOOP_HOME/etc/<nombre_directorio>/mapred-site.xml.template.

Editar el fichero e insertar las siguientes líneas dentro de las etiquetas <configuration> </configuration>.

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<property>
    <name>mapred.job.tracker</name>
    <value>localhost:54311</value>
    <description>The host and port that the MapReduce job tracker runs at.  If "local", then jobs are run in-process as a single map and reduce task.</description>
</property>

Editar el fichero $HADOOP_HOME/etc/<nombre_directorio>/yarn-site.xml:

Insertar las siguientes líneas entre las etiquetas <configuration> </configuration>:

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

Para más información sobre cómo configurar estos ficheros se pueden visitar los siguientes enlaces: Docs (Inglés) y API (Inglés).

Actualizar $HOME/.bashrc

Añadir las siguientes líneas al final del fichero $HOME/.bashrc para el usuario hduser.

# Set Hadoop-related environment variables
export HADOOP_HOME=/usr/local/<nombre_directorio>
# Set JAVA_HOME (we will configure JAVA_HOME for Hadoop later on)
export JAVA_HOME=/usr/lib/jvm/default-java
# Some convenient aliases and functions for running Hadoop-related commands
unalias fs &> /dev/null
alias fs="hadoop fs"
unalias hls &> /dev/null
alias hls="fs -ls"
# If you have LZO compression enabled in your Hadoop «clúster» and
# compress job outputs with LZOP
# Conveniently inspect an LZOP compressed file from the command
# line; run via:
#
# $ lzohead /hdfs/path/to/lzop/compressed/file.lzo
#
# Requires installed 'lzop' command.
#
lzohead () {
    hadoop fs -cat $1 | lzop -dc | head -1000 | less
}
# Add Hadoop bin/ directory to PATH
export PATH=$PATH:$HADOOP_HOME/bin

Si utiliza un shell diferente a bash, tendrá que editar el fichero correspondiente para añadir estas líneas.

Hay que copiar estas líneas en el fichero .bashrc de todos aquellos usuarios que vayan a utilizarlo.

Para aplicar los cambios, ejecutar este comando.

source ~/.bashrc

Formatear el sistema de archivos HDFS

Otra de las cosas que hay que hacer después de instalar Apache Hadoop es formatear el sistema de archivos del «clúster». Sólo hay que realizar el formateo la primera vez que se se configura el «clúster».

Para formatear el sistema de archivos, ejecutar el siguiente comando.

/usr/local/<nombre_directorio>/bin/hadoop namenode -format

Lo cual devuelve un mensaje por pantalla parecido a este:

14/12/07 20:13:14 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = Toshiba/127.0.1.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.6.0
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
************************************************************/
...
14/12/07 20:13:18 INFO namenode.FSNamesystem: fsOwner=hduser,hadoop
14/12/07 20:13:18 INFO namenode.FSNamesystem: supergroup=supergroup
14/12/07 20:13:18 INFO namenode.FSNamesystem: isPermissionEnabled=true
14/12/07 20:13:19 INFO common.Storage: Image file of size 96 saved in 0 seconds.
14/12/07 20:13:19 INFO common.Storage: Storage directory .../hadoop-hduser/dfs/name has been successfully formatted.
14/12/07 20:13:19 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1
************************************************************/

Arrancar el «Clúster»

Para arrancar el «clúster» hay que seguir los siguientes pasos.

Lo primero que hay que hacer es arrancar el dfs (distributed file system), para lo cual basta con ejecutar el siguiente comando.

/usr/local/<nombre_directorio>/sbin/start-dfs.sh

Cuando nos pregunte si queremos continuar conectando al nodo, indicarle que sí (yes).

A continuación, arrancar los yarn daemons. Para ello, ejecutar el siguiente comando.

/usr/local/<nombre_directorio>/sbin/start-yarn.sh

También se puede ejecutar solamente este comando, que realiza todas las operaciones necesarias para arrancar el «clúster».

/usr/local/<nombre_directorio>/sbin/start-all.sh

Para comprobar que se ha arrancado todo correctamente, se puede ejecutar el siguiente comando, que indicará los procesos de Hadoop que se están ejecutando.

jps

Esto devolverá un mensaje por pantalla parecido al siguiente.

3543 DataNode
4021 NodeManager
3903 ResourceManager
4318 Jps
3747 SecondaryNameNode
3432 NameNode

Con el comando netstat se puede comprobar si Hadoop está escuchando en los puertos configurados.

sudo netstat -plten | grep java

  • Interfaz web del NameNode: http://localhost:50070/
  • Interfaz web del DataNode: http://localhost:50075/
  • Interfaz web del SecondaryNameNode: http://localhost:50090/
  • Interfaz web del ResourceManager («Clúster»): http://localhost:8088/

En caso de producirse algún error, se puede acceder a los ficheros de log que están ubicados en el directorio /logs/.

Subir ficheros a HDFS

Si se quiere hacer una prueba de manejo de ficheros, se pueden ejecutar los siguientes comandos.

Crear un directorio HDFS

hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/hduser

Copiar archivos en el sistema de ficheros distribuido

hdfs dfs -put <carpeta_local_origen> <carpeta_hdfs_destino>

Borrar un archivo del sistema de ficheros distribuido

hdfs dfs -rm <carpeta_hdfs>/<nombre_fichero>

Para conocer más comandos HDFS, puede visitar el siguiente enlace: HDFS Commands (Inglés).

Parar el «Clúster»

Para parar el «clúster» hay que seguir los siguientes pasos.

Lo primero que hay que hacer es parar el sistema de ficheros distribuido (dfs – distributed file system), para lo cual basta con ejecutar el siguiente comando.

/usr/local/<nombre_directorio>/sbin/stop-dfs.sh

A continuación, para parar los yarn daemons, ejecutar el siguiente comando.

/usr/local/<nombre_directorio>/sbin/stop-yarn.sh

También se puede ejecutar solamente este comando, que realiza todas las operaciones necesarias para parar el «clúster».

/usr/local/<nombre_directorio>/sbin/stop-all.sh

Para más información sobre cómo depurar programas MapReduce, puede visitar el siguiente enlace: Debug MapReduce Programs (Inglés).

3 comentarios en «¿Cómo instalar Apache Hadoop?»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *