Cómo instalar Apache Hadoop en Ubuntu 22.04
Apache Hadoop es un marco de código abierto para procesar y almacenar big data. En las industrias actuales, Hadoop se ha convertido en el marco estándar para los grandes datos. Hadoop está diseñado para ejecutarse en sistemas distribuidos con cientos o incluso miles de ordenadores agrupados o servidores dedicados. Teniendo esto en cuenta, Hadoop puede manejar grandes conjuntos de datos de gran volumen y complejidad, tanto para datos estructurados como no estructurados.
Toda implementación de Hadoop contiene los siguientes componentes:
- Hadoop Común: Las utilidades comunes que dan soporte a los demás módulos de Hadoop.
- Sistema de Archivos Distribuidos Hadoop (HDFS): Un sistema de archivos distribuido que proporciona acceso de alto rendimiento a los datos de las aplicaciones.
- Hadoop YARN: Un marco para la programación de trabajos y la gestión de recursos de clúster.
- Hadoop MapReduce: Un sistema basado en YARN para el procesamiento paralelo de grandes conjuntos de datos.
En este tutorial, instalaremos la última versión de Apache Hadoop en un servidor Ubuntu 22.04. Hadoop se instala en un servidor de un solo nodo y creamos un Modo Pseudo-Distribuido de despliegue de Hadoop.
Requisitos previos
Para completar esta guía, necesitarás los siguientes requisitos:
- Un servidor Ubuntu 22.04 – Este ejemplo utiliza un servidor Ubuntu con nombre de host servidor ‘hadoop’ y dirección IP ‘192.168.5.100’.
- Un usuario no root con privilegios de administrador sudo/root.
Instalación del OpenJDK de Java
Hadoop es un gran proyecto de la Apache Software Foundation, que está escrito principalmente en Java. En el momento de escribir esto, la última versión de hadoop es la v3.3,4, que es totalmente compatible con Java v11.
El OpenJDK 11 de Java está disponible por defecto en el repositorio de Ubuntu, y lo instalarás mediante APT.
Para empezar, ejecuta el siguiente comando apt para actualizar y refrescar las listas/repositorios de paquetes en tu sistema Ubuntu.
sudo apt update
Ahora instala el OpenJDK 11 de Java mediante el siguiente comando apt. En el repositorio de Ubuntu 22.04, el paquete ‘default-jdk’ se refiere al Java OpenJDK v11.
sudo apt install default-jdk
Cuando se te solicite, introduce y para confirmar y pulsa ENTER para continuar. Y comenzará la instalación de Java OpenJDK.
Una vez instalado Java, ejecuta el siguiente comando para verificar la versión de Java. Deberías tener el Java OpenJDK 11 instalado en tu sistema Ubuntu.
java -version
Ahora que el Java OpebnJDK está instalado, a continuación configurarás un nuevo usuario con autenticación SSH sin contraseña que se utilizará para ejecutar los procesos y servicios de hadoop.
Configurar el usuario y la autenticación SSH sin contraseña
Apache Hadoop requiere que se ejecute el servicio SSH en el sistema. Éste será utilizado por los scripts hadoop para gestionar el demonio hadoop remoto en el servidor remoto. En este paso, crearás un nuevo usuario que se utilizará para ejecutar los procesos y servicios de hadoop y, a continuación, configurarás la autenticación SSH sin contraseña.
En caso de que no tengas SSH instalado en tu sistema, ejecuta el siguiente comando apt para instalar SSH. El paquete«pdsh» es un cliente shell remoto multihilo que te permite ejecutar comandos en varios hosts en modo paralelo.
sudo apt install openssh-server openssh-client pdsh
Ahora ejecuta el siguiente comando para crear un nuevo usuario «hadoop» y establece la contraseña para el usuario «hadoop».
sudo useradd -m -s /bin/bash hadoop sudo passwd hadoop
Introduce la nueva contraseña para el usuario ‘hadoop‘ y repite la contraseña.
A continuación, añade el usuario «hadoop» al grupo«sudo» mediante el comando usermod que aparece a continuación. Esto permite al usuario «hadoop» ejecutar el comando «sudo».
sudo usermod -aG sudo hadoop
Ahora que el usuario «hadoop» está creado, inicia sesión con el usuario«hadoop» mediante el siguiente comando.
su - hadoop
Una vez iniciada la sesión, el símbolo del sistema será el siguiente«hadoop@nombrehost..».
A continuación, ejecuta el siguiente comando para generar la clave pública y privada SSH. Cuando se te pida que establezcas la contraseña de la clave, pulsa ENTER para omitirla.
ssh-keygen -t rsa
La clave SSH se genera ahora en el directorio ~/.ssh. El archivo id_rsa .pub es la clave pública SSH y el archivo ‘id_rsa ‘ es la clave privada.
Puedes verificar la clave SSH generada mediante el siguiente comando.
ls ~/.ssh/
A continuación, ejecuta el siguiente comando para copiar la clave pública SSH ‘id_rsa.pub’ en el archivo ‘authorized_keys‘ y cambia el permiso por defecto a 600.
En ssh, el archivo ‘authorized_keys» es donde almacenaste la clave pública ssh, que pueden ser varias claves públicas. Cualquiera que tenga la clave pública almacenada en el archivo ‘authorized_keys‘ y disponga de la clave privada correcta podrá conectarse al servidor como usuario‘hadoop‘ sin necesidad de contraseña.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
Una vez finalizada la configuración SSH sin contraseña, puedes verificarlo conectándote a la máquina local mediante el comando ssh que aparece a continuación.
ssh localhost
Introduce sí para confirmar y añade la huella digital SSH y estarás conectado al servidor sin autenticación de contraseña.
Ahora que ya está creado el usuario‘hadoop‘ y configurada la autenticación SSH sin contraseña, a continuación vas a realizar la instalación de hadoop descargando el paquete binario hadoop.
Descarga de Hadoop
Tras crear un nuevo usuario y configurar la autenticación SSH sin contraseña, ahora puedes descargar el paquete binario de Apache Hadoop y configurar el directorio de instalación para él. En este ejemplo, descargarás hadoop v3.3.4 y el directorio de instalación de destino será el directorio‘/usr/local/hadoop‘.
Ejecuta el siguiente comando wget para descargar el paquete binario de Apache Hadoop al directorio de trabajo actual. Deberías obtener el archivo‘hadoop-3.3.4.tar.gz‘ en tu directorio de trabajo actual.
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
A continuación, extrae el paquete de Apache Hadoop ‘hadoop-3.3 .4.tar.g z’ mediante el siguiente comando tar. A continuación, mueve el directorio extraído a‘/usr/local/hadoop’.
tar -xvzf hadoop-3.3.4.tar.gz sudo mv hadoop-3.3.4 /usr/local/hadoop
Por último, cambia la propiedad del directorio de instalación de hadoop ‘/usr/local/hadoop ‘ al usuario‘hadoop‘ y al grupo‘hadoop‘.
sudo chown -R hadoop:hadoop /usr/local/hadoop
En este paso, has descargado el paquete binario de Apache Hadoop y configurado el directorio de instalación de hadoop. Con esto en mente, ya puedes empezar a configurar la instalación de hadoop.
Configurar las variables de entorno de Hadoop
Abre el archivo de configuración‘~/.bashrc‘ mediante el comando editor nano que aparece a continuación.
nano ~/.bashrc
Añade las siguientes líneas al archivo. Asegúrate de colocar las siguientes líneas al final del mismo.
# Hadoop environment variables export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 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 HADOOP_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 el archivo y sal del editor cuando hayas terminado.
A continuación, ejecuta el siguiente comando para aplicar los nuevos cambios dentro del archivo‘~/.bashrc’.
source ~/.bashrc
Una vez ejecutado el comando, se aplicarán las nuevas variables de entorno. Puedes verificarlo comprobando cada variable de entorno mediante el comando siguiente. Y deberías obtener la salida de cada variable de entorno.
echo $JAVA_HOME echo $HADOOP_HOME echo $HADOOP_OPTS
A continuación, también configurarás la variable de entorno JAVA_HOME en el script ‘hadoop-env.sh‘.
Abre el archivo ‘hadoop-env.sh’ utilizando el siguiente comando del editor nano. El archivo ‘hadoop-env.sh’ está disponible en el directorio‘$HADOOP_HOME‘, que hace referencia al directorio de instalación de hadoop ‘/usr/local/hadoop‘.
nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh
Descomenta la línea de entorno JAVA_HOME y cambia el valor al directorio de instalación de Java OpenJDK‘/usr/lib/jvm/java-11-openjdk-amd64‘.
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Guarda el archivo y sal del editor cuando hayas terminado.
Con las variables de entorno configuradas, ejecuta el siguiente comando para verificar la versión de hadoop en tu sistema. Deberías ver Apache Hadoop 3.3.4 instalado en tu sistema.
hadoop version
Llegados a este punto, ya estás preparado para instalar y configurar el clúster hadoop, que puede desplegarse en varios modos.
Configuración del clúster Apache Hadoop: Modo Pseudo-Distribuido
En hadoop, puedes crear un clúster en tres modos diferentes:
- ModoLocal (Standalone) – instalación por defecto de hadoop, que se ejecuta como un único proceso Java y en modo no distribuido. Con él, puedes depurar fácilmente el proceso hadoop.
- ModoPseudo-Distribuido – Te permite ejecutar un cluster hadoop con modo distribuido incluso con un único nodo/servidor. En este modo, los procesos hadoop se ejecutarán en procesos Java separados.
- ModoTotalmente Distribuido – gran despliegue de hadoop con múltiples o incluso miles de nodos/servidores. Si quieres ejecutar hadoop en producción, debes utilizar hadoop en modo totalmente distribuido.
En este ejemplo, configurarás un clúster Apache Hadoop con modo Pseudo-Distribuido en un único servidor Ubuntu. Para ello, realizarás cambios en algunas de las configuraciones de hadoop:
- core-site.xml – Se utilizará para definir NameNode para el clúster hadoop.
- hdfs-site.xml – Esta configuración se utilizará para definir el NodoDatos del clúster hadoop.
- mapred-site. xml – La configuración de MapReduce para el clúster hadoop.
- yarn-site.xml – Configuración de ResourceManager y NodeManager para el clúster hadoop.
Configurar NameNode y DataNode
En primer lugar, configurarás el NameNode y el DataNode para el clúster hadoop.
Abre el archivo‘$HADOOP_HOME/etc/hadoop/core-site.xml‘ utilizando el siguiente editor nano.
sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml
Añade las siguientes líneas al archivo. Asegúrate de cambiar la dirección IP del NameNode, o puedes sustituirla por ‘0.0.0.0’ para que el NameNode se ejecute en todas las interfaces y direcciones IP.
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://192.168.5.100:9000</value> </property> </configuration>
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, ejecuta el siguiente comando para crear nuevos directorios que se utilizarán para el DataNode en el cluster hadoop. A continuación, cambia la propiedad de los directorios del DataNode al usuario ‘hadoop‘.
sudo mkdir -p /home/hadoop/hdfs/{namenode,datanode} sudo chown -R hadoop:hadoop /home/hadoop/hdfs
Después, abre el archivo ‘$HADOOP_HOME/etc/hadoop/hdfs-site.x ml’ utilizando el siguiente comando del editor nano.
sudo nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml
Añade la siguiente configuración al archivo. En este ejemplo, vas a configurar el cluster hadoop en un único nodo, por lo que debes cambiar el valor de ‘dfs.replication’ a ‘1’. Además, debes especificar el directorio que se utilizará para el Nodo de Datos.
<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 el archivo y sal del editor cuando hayas terminado.
Con el NodoNombre y el NodoDatos configurados, ejecuta el siguiente comando para formatear el sistema de archivos hadoop.
hdfs namenode -format
Recibirás una salida como ésta:
A continuación, inicia el NameNode y el DataNode mediante el siguiente comando. El NameNode se ejecutará en la dirección IP del servidor que hayas configurado en el archivo ‘core-site.xml’.
start-dfs.sh
Verás una salida como ésta:
Ahora que el NameNode y el DataNode se están ejecutando, verificarás ambos procesos a través de la interfaz web.
La interfaz web hadoop NameNode se ejecuta en el puerto‘9870‘. Por tanto, abre tu navegador web y visita la dirección IP del servidor seguida del puerto 9870 (es decir: http://192.168.5.100:9870/).
Ahora deberías obtener la página como la siguiente captura de pantalla – El NameNode está actualmente activo.
Ahora haz clic en el menú «Datanodes» y deberías obtener el DataNode actual que está activo en el cluster hadoop. La siguiente captura de pantalla confirma que el Nodo de Datos se está ejecutando en el puerto‘9864‘ del cluster hadoop.
Haz clic en la‘Dirección Http‘ del DataNode y deberías obtener una nueva página con información detallada sobre el DataNode. La siguiente captura de pantalla confirma que el DataNode se está ejecutando con el directorio de volumen‘/home/hadoop/hdfs/datanode‘.
Con el NameNode y el DataNode en ejecución, a continuación configurarás y ejecutarás MapReduce en el gestor Yarn (otro gestor de recursos y otro gestor de nodos).
Gestor Yarn
Para ejecutar un MapReduce en Yarn en modo pseudodistribuido, tienes que hacer algunos cambios en los archivos de configuración.
Abre el archivo ‘$HADOOP_HOME/etc/hadoop/mapred-site.xml’ utilizando el siguiente comando del editor nano.
sudo nano $HADOOP_HOME/etc/hadoop/mapred-site.xml
Añade las siguientes líneas al archivo. Asegúrate de cambiar mapreduce.framework.name por ‘yarn’.
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.application.classpath</name> <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value> </property> </configuration>
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, abre la configuración de Yarn‘$HADOOP_HOME/etc/hadoop/yarn-site.xml’ utilizando el siguiente comando del editor nanoe.
sudo nano $HADOOP_HOME/etc/hadoop/yarn-site.xml
Cambia la configuración por defecto con los siguientes ajustes.
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value> </property> </configuration>
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora ejecuta el siguiente comando para iniciar los demonios Yarn. Y deberías ver que tanto ResourceManager como NodeManager se están iniciando.
start-yarn.sh
El ResourceManager debería estar ejecutándose en el puerto por defecto 8088. Vuelve a tu navegador web y visita la dirección IP del servidor seguida del puerto ‘8088’ del ResourceManager (es decir: http://192.168.5.100:8088/).
Deberías ver la interfaz web del Gestor de Recursos hadoop. Desde aquí, puedes monitorizar todos los procesos en ejecución dentro del clúster hadoop.
Haz clic en el menú Nodos y deberías obtener el nodo que se está ejecutando actualmente en el clúster Hadoop.
Ahora el clúster Hadoop se está ejecutando en modo pseudodistribuido. Esto significa que cada proceso Hadoop se está ejecutando como un único proceso en un único nodo del servidor Ubuntu 22.04, que incluye el NameNode, DataNode, MapReduce y Yarn.
Conclusión
En esta guía, has instalado Apache Hadoop en un servidor Ubuntu 22.04 de una sola máquina. Instalaste Hadoop con el modo Pseudo-Distribuido activado, lo que significa que cada componente de Hadoop se ejecuta como un único proceso Java en el sistema. En esta guía también has aprendido a configurar Java, a configurar las variables de entorno del sistema y a configurar la autenticación SSH sin contraseña mediante clave pública-privada SSH.
Este tipo de despliegue de Hadoop, el modo Pseudo-Distribuido, se recomienda sólo para pruebas. Si quieres un sistema distribuido que pueda manejar conjuntos de datos medianos o grandes, puedes desplegar Hadoop en el modo Agrupado, que requiere más sistemas informáticos y proporciona alta disponibilidad para tu aplicación.