Introducción a Apache Hadoop

Introducción a Apache Hadoop. Configurando y ejecutando una de las herramientas open source más comunes utilizadas en contextos de big data.

Configuración de un único nodo sin Yarn

Introducción

A veces puede resultar un poco agobiante entender el papel de las tecnologías open source más comunes utilizadas en contextos de big data.

Por ejemplo, probablemente la mayoría de vosotros ha oído hablar de herramientas como Apache Hadoop, Apache Spark, Apache Hive, Apache Sqoop, etc. Pero, ¿cómo saber cuándo utilizar una u otra? ¿Depende una herramienta de otra?

Pues bien, en la mayoría de los casos la respuesta es sí. Con una serie de post escritos por Damavis Studio sobre el Ecosistema Hadoop, intentaremos que todo quede más claro, no sólo aportando definiciones teóricas sino poniéndonos manos a la obra configurando y ejecutando las herramientas explicadas.

Para introducirse en el mundo de big data tenemos que empezar desde abajo. ¿Cuál es la herramienta base en big data? Por supuesto, la herramienta base es Apache Hadoop.

¿Qué es Apache Hadoop?

Apache Hadoop es un framework open source utilizado para almacenar y procesar big data de forma distribuida y tolerante a fallos. Hay varios módulos que componen Apache Hadoop. Los que queremos destacar son:

  • Hadoop Distributed File System, también conocido como HDFS, que es la forma en que Hadoop almacena los datos de forma distribuida y con tolerancia a fallos. ¿Cómo se consigue la tolerancia a fallos? Sencillamente, mediante la replicación: los datos se copian entre los distintos nodos, de modo que en caso de fallo de un nodo, sus datos pueden obtenerse a partir de su replicación en otros nodos. Ten en cuenta que este módulo trata sobre el almacenamiento de datos.
  • Hadoop MapReduce, que es el módulo encargado de aplicar el modelo de programación MapReduce para procesar datos de forma distribuida. Por lo tanto, el objetivo de este módulo es realizar el procesamiento de datos.
  • Apache Yarn, que es el componente encargado de gestionar los trabajos y recursos del cluster. Esta herramienta responde a preguntas como, ¿cómo debe distribuirse una tarea en el clúster? ¿Qué nodos deben participar en esta tarea? ¿Cómo debe redistribuirse el trabajo en caso de fallo de un nodo? Y otras acciones que veremos en posts dedicados sobre esta tecnología. Por lo tanto, el objetivo de este módulo es realizar la gestión del clúster.

En este post no vamos a introducirte en la configuración y uso de Apache Yarn. Esto se debe a que para lanzar un HDFS y realizar MapReduce jobs en una configuración de un solo nodo no es necesario configurar un gestor de cluster como Apache Yarn.

¡No te pierdas nuestro próximo post de esta serie, donde explicaremos cómo usar Hadoop con Yarn!

Configuración

En primer lugar, vamos a descargar Hadoop, descomprimirlo y crear un enlace simbólico (esto último es simplemente para facilitar la actualización de Hadoop en caso de que sea necesario en el futuro). Guardamos la distribución en la ubicación ~/apache. Siéntete libre de guardar el proyecto en una ubicación que se adapte mejor a tu contexto.

Para obtener Apache Hadoop, ejecuta los siguientes comandos:

wget https://ftp.cixug.es/apache/hadoop/common/hadoop-2.10.1/hadoop-2.10.1.tar.gz -P ~/apache
tar -xf ~/apache/hadoop-2.10.1.tar.gz -C ~/apache
rm ~/apache/hadoop-2.10.1.tar.gz
ln -s ~/apache/hadoop-2.10.1/ ~/apache/hadoop

Para poder utilizar Apache Hadoop necesitamos asegurarnos de que Java 8 está instalado en la máquina. Ejecuta java -version para comprobarlo. Si no es así, instala Java 8 ejecutando los siguientes comandos:

sudo apt update
sudo apt install openjdk-8-jdk -y

Para que Hadoop funcione, sólo hay que establecer dos variables de entorno, que son JAVA_HOME y HADOOP_CONF_DIR. Estas dos asignaciones se pueden hacer en el archivo ~/apache/hadoop/etc/hadoop/hadoop-env.sh.

El valor de estas dos variables debe ser:

export HADOOP_CONF_DIR=~/apache/hadoop/etc/hadoop
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

Como estamos ejecutando Hadoop en un solo nodo, no hay necesidad de replicar los datos entre los nodos, que es el comportamiento por defecto. Para eliminar la replicación añade la siguiente propiedad al archivo de configuración ~/apache/hadoop/etc/hadoop/hdfs-site.xml :

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

El siguiente paso es especificar la ubicación donde el HDFS debe ser construido. Como estamos ejecutando todo localmente, vamos a construir HDFS en localhost.

Para que esto ocurra, añade la siguiente propiedad al archivo de configuración ~/apache/hadoop/etc/hadoop/core-site.xml:

<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>

Por último, como al construir HDFS hay que hacer una conexión a localhost, necesitamos poder hacer ssh a localhost. Para ello, copia tu clave ssh pública en la carpeta que contiene las claves ssh autorizadas:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

Ten en cuenta que para que el comando anterior funcione, debes haber generado claves ssh previamente (ssh-keygen si no hay ninguna clave ssh en su máquina).

Recomendamos modificar la variable de entorno PATH para poder ejecutar los comandos de Hadoop desde cualquier ubicación. Para ello, añade el siguiente comando en .bashrc:

export PATH=~/apache/hadoop/bin:$PATH

Recuerda ejecutar source .bashrc para aplicar el cambio en la sesión actual.

¡Apache Hadoop ya está configurado!

Comprueba tu configuración

Para asegurarnos de que todo se ha hecho correctamente, vamos a lanzar HDFS y copiar un archivo en él. Para lanzar HDFS ejecuta primero hdfs namenode -format para lanzar el NameNode, que es un servidor maestro que mantiene el mapa de directorios de todos los archivos. A continuación, ejecuta el script ubicado en ~/apache/hadoop/sbin/start-dfs.sh. Seguidamente, introduce en tu navegador la URI http://localhost:50070 para poder ver la UI de Hadoop.

Ahora vamos a crear un archivo llamado tmp y copiarlo en nuestro HDFS:

touch tmp
hdfs dfs -copyFromLocal ~/tmp hdfs://

Tienes dos maneras de ver si el archivo tmp ha sido copiado a HDFS, ya sea enumerando los archivos desde la línea de comandos:

hdfs dfs -ls hdfs://

O utilizando la UI haciendo clic en Utilities/Browse the file system:

Próximos pasos

Proximamente publicaremos la segunda parte de este artículo, donde se utilizará Apache Yarn en nuestro Ecosistema Hadoop, que es la forma correcta de utilizar Hadoop.

Si te ha parecido útil este post, compártelo con tus contactos para que ellos también puedan leerlo y opinar. ¡Nos vemos en redes!
Imagen por defecto
Daniel Bestard
Artículos: 4