Cómo instalar y configurar Apache Hadoop en Ubuntu 20.04

Apache Hadoop es un marco de trabajo de código abierto utilizado para gestionar, almacenar y procesar datos para diversas aplicaciones de big data que se ejecutan en sistemas en clúster. Está escrito en Java con algo de código nativo en C y shell scripts. Utiliza un sistema de archivos distribuido (HDFS) y puede escalarse desde servidores individuales a miles de máquinas.

Apache Hadoop se basa en cuatro componentes principales:

  • Hadoop Common : Es la colección de utilidades y bibliotecas que necesitan otros módulos de Hadoop.
  • HDFS : También conocido como Sistema de Archivos Distribuido Hadoop distribuido en múltiples nodos.
  • MapReduce: Es un marco utilizado para escribir aplicaciones para procesar enormes cantidades de datos.
  • Hadoop YARN: También conocido como Yet Another Resource Negotiator es la capa de gestión de recursos de Hadoop.

En este tutorial, explicaremos cómo configurar un clúster Hadoop de un solo nodo en Ubuntu 20.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 20.04 con 4 GB de RAM.
  • Una contraseña de root configurada en tu servidor.

Actualiza los paquetes del sistema

Antes de empezar, se recomienda actualizar los paquetes del sistema a la última versión. Puedes hacerlo con el siguiente comando:

apt-get update -y
apt-get upgrade -y

Una vez actualizado tu sistema, reinícialo para aplicar los cambios.

Instala Java

Apache Hadoop es una aplicación basada en Java. Así que necesitarás instalar Java en tu sistema. Puedes instalarlo con el siguiente comando:

apt-get install default-jdk default-jre -y

Una vez instalado, puedes verificar la versión instalada de Java con el siguiente comando:

java -version

Deberías obtener la siguiente salida:

openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)

Crear usuario Hadoop y configurar SSH sin contraseña

En primer lugar, crea un nuevo usuario llamado hadoop con el siguiente comando:

adduser hadoop

A continuación, añade el usuario hadoop al grupo sudo
usermod -aG sudo hadoop

A continuación, inicia sesión con el usuario hadoop y genera un par de claves SSH con el siguiente comando:

su - hadoop
ssh-keygen -t rsa

Deberías obtener la siguiente salida:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): 
Created directory '/home/hadoop/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/hadoop/.ssh/id_rsa
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:HG2K6x1aCGuJMqRKJb+GKIDRdKCd8LXnGsB7WSxApno hadoop@ubuntu2004
The key's randomart image is:
+---[RSA 3072]----+
|..=..            |
| O.+.o   .       |
|oo*.o + . o      |
|o .o * o +       |
|o+E.= o S        |
|=.+o * o         |
|*.o.= o o        |
|=+ o.. + .       |
|o ..  o .        |
+----[SHA256]-----+

A continuación, añade esta clave a las Claves ssh autorizadas y dale el permiso adecuado:

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

A continuación, verifica el SSH sin contraseña con el siguiente comando:

ssh localhost

Una vez que hayas iniciado sesión sin contraseña, puedes pasar al siguiente paso.

Instalar Hadoop

En primer lugar, inicia sesión con el usuario hadoop y descarga la última versión de Hadoop con el siguiente comando:

su - hadoop
wget https://downloads.apache.org/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz

Una vez finalizada la descarga, extrae el archivo descargado con el siguiente comando:

tar -xvzf hadoop-3.2.1.tar.gz

A continuación, mueve el directorio extraído al directorio /usr/local/:

sudo mv hadoop-3.2.1 /usr/local/hadoop

A continuación, crea un directorio para almacenar el registro con el siguiente comando:

sudo mkdir /usr/local/hadoop/logs

A continuación, cambia la propiedad del directorio hadoop a hadoop:

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

A continuación, tendrás que configurar las variables de entorno de Hadoop. Puedes hacerlo editando el archivo ~/.bashrc:

nano ~/.bashrc

Añade las siguientes líneas:

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

Guarda y cierra el archivo cuando hayas terminado. A continuación, activa las variables de entorno con el siguiente comando:

source ~/.bashrc

Configurar Hadoop

En esta sección, aprenderemos a configurar Hadoop en un único nodo.

Configurar las variables de entorno de Java

A continuación, tendrás que definir variables de entorno Java en hadoop-env.sh para configurar YARN, HDFS, MapReduce y los ajustes del proyecto relacionados con Hadoop.

En primer lugar, localiza la ruta correcta de Java utilizando el siguiente comando:

which javac

Deberías ver la siguiente salida:

/usr/bin/javac

A continuación, localiza el directorio OpenJDK con el siguiente comando:

readlink -f /usr/bin/javac

Deberías ver el siguiente resultado:

/usr/lib/jvm/java-11-openjdk-amd64/bin/javac

A continuación, edita el archivo hadoop-env.sh y define la ruta de Java:

sudo nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh

Añade las siguientes líneas:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 
export HADOOP_CLASSPATH+=" $HADOOP_HOME/lib/*.jar"

A continuación, también tendrás que descargar el archivo de activación Javax. Puedes descargarlo con el siguiente comando:

cd /usr/local/hadoop/lib
sudo wget https://jcenter.bintray.com/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar

Ahora puedes verificar la versión de Hadoop con el siguiente comando:

hadoop version

Deberías obtener la siguiente salida:

Hadoop 3.2.1
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r b3cbbb467e22ea829b3808f4b7b01d07e0bf3842
Compiled by rohithsharmaks on 2019-09-10T15:56Z
Compiled with protoc 2.5.0
From source with checksum 776eaf9eee9c0ffc370bcbc1888737
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.2.1.jar

Configurar el archivo core-site.xml

A continuación, tendrás que especificar la URL de tu NameNode. Puedes hacerlo editando el archivo core-site.xml:

sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml

Añade las siguientes líneas:

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://0.0.0.0:9000</value>
      <description>The default file system URI</description>
   </property>

</configuration>

Guarda y cierra el archivo cuando hayas terminado:

Configura el archivo hdfs-site.xml

A continuación, tendrás que definir la ubicación para almacenar los metadatos del nodo, el archivo fsimage y el archivo de registro de edición. Puedes hacerlo editando el archivo hdfs-site.xml. Primero, crea un directorio para almacenar los metadatos de los nodos:

sudo mkdir -p /home/hadoop/hdfs/{namenode,datanode}
sudo chown -R hadoop:hadoop /home/hadoop/hdfs

A continuación, edita el archivo hdfs-site.xml y define la ubicación del directorio:

sudo nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml

Añade las siguientes líneas:

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>

   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hdfs/namenode</value>
   </property>

   <property>
      <name>dfs.data.dir</name>
      <value>file:///home/hadoop/hdfs/datanode</value>
   </property>
</configuration>

Guarda y cierra el archivo.

Configurar el archivo mapred-site.xml

A continuación, tendrás que definir los valores de MapReduce. Puedes definirlos editando el archivo mapred-site.xml:

sudo nano $HADOOP_HOME/etc/hadoop/mapred-site.xml

Añade las siguientes líneas:

<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

Guarda y cierra el archivo.

Configurar el archivo yarn-site.xml

A continuación, tendrás que editar el archivo yarn-site.xml y definir la configuración relacionada con YARN:

sudo nano $HADOOP_HOME/etc/hadoop/yarn-site.xml

Añade las siguientes líneas:

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

Guarda y cierra el archivo cuando hayas terminado.

Formatear HDFS NameNode

A continuación, tendrás que validar la configuración de Hadoop y formatear el HDFS NameNode.

En primer lugar, inicia sesión con el usuario Hadoop y formatea el HDFS NameNode con el siguiente comando:

su - hadoop
hdfs namenode -format

Deberías obtener la siguiente salida:

2020-06-07 11:35:57,691 INFO util.GSet: VM type       = 64-bit
2020-06-07 11:35:57,692 INFO util.GSet: 0.25% max memory 1.9 GB = 5.0 MB
2020-06-07 11:35:57,692 INFO util.GSet: capacity      = 2^19 = 524288 entries
2020-06-07 11:35:57,706 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.window.num.buckets = 10
2020-06-07 11:35:57,706 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.num.users = 10
2020-06-07 11:35:57,706 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.windows.minutes = 1,5,25
2020-06-07 11:35:57,710 INFO namenode.FSNamesystem: Retry cache on namenode is enabled
2020-06-07 11:35:57,710 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis
2020-06-07 11:35:57,712 INFO util.GSet: Computing capacity for map NameNodeRetryCache
2020-06-07 11:35:57,712 INFO util.GSet: VM type       = 64-bit
2020-06-07 11:35:57,712 INFO util.GSet: 0.029999999329447746% max memory 1.9 GB = 611.9 KB
2020-06-07 11:35:57,712 INFO util.GSet: capacity      = 2^16 = 65536 entries
2020-06-07 11:35:57,743 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1242120599-69.87.216.36-1591529757733
2020-06-07 11:35:57,763 INFO common.Storage: Storage directory /home/hadoop/hdfs/namenode has been successfully formatted.
2020-06-07 11:35:57,817 INFO namenode.FSImageFormatProtobuf: Saving image file /home/hadoop/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 using no compression
2020-06-07 11:35:57,972 INFO namenode.FSImageFormatProtobuf: Image file /home/hadoop/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 of size 398 bytes saved in 0 seconds .
2020-06-07 11:35:57,987 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
2020-06-07 11:35:58,000 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid=0 when meet shutdown.
2020-06-07 11:35:58,003 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu2004/69.87.216.36
************************************************************/

Iniciar el Cluster Hadoop

En primer lugar, inicia el NameNode y el DataNode con el siguiente comando:

start-dfs.sh

Deberías obtener el siguiente resultado

Starting namenodes on [0.0.0.0]
Starting datanodes
Starting secondary namenodes [ubuntu2004]

A continuación, inicia los gestores de recursos y nodos YARN ejecutando el siguiente comando:

start-yarn.sh

Deberías obtener la siguiente salida:

Starting resourcemanager
Starting nodemanagers

Ahora puedes verificarlos con el siguiente comando:

jps

Deberías obtener la siguiente salida:

5047 NameNode
5850 Jps
5326 SecondaryNameNode
5151 DataNode

Accede a la Interfaz Web de Hadoop

Ahora puedes acceder al NameNode de Hadoop utilizando la URL http://your-server-ip:9870. Deberías ver la siguiente pantalla:

Interfaz Web Hadoop

También puedes acceder a los Nodos de Datos individuales utilizando la URL http://your-server-ip:9864. Deberías ver la siguiente pantalla:

Nodo de Datos Hadoop

Para acceder al Gestor de Recursos YARN, utiliza la URL http://your-server-ip:8088. Deberías ver la siguiente pantalla:

Gestor de Recursos Hadoop Yarn

Conclusión

Enhorabuena! has instalado con éxito Hadoop en un único nodo. Ahora puedes empezar a explorar los comandos básicos de HDFS y diseñar un clúster Hadoop totalmente distribuido. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...