Desplegando un cluster distribuido con Hadoop 2.6.0

Apache Hadohadoopop es un framework que permite el procesamiento distribuido de grandes conjuntos de datos a través de un conjunto de ordenadores utilizando modelos básicos de programación.

Hadoop está diseñado para escalar de un servidor individual a miles de máquinas, ofreciendo computación y almacenamiento local. Por otro lado, en lugar de depender del hardware para ofrecer HA, Hadoop detecta y controla los errores en la capa de aplicación.

Conceptos básicos de Hadoop

  • HDFS (Hadoop Distributed File System): es un sistema de archivos distribuido altamente tolerante a fallos y está diseñado para ser implementado en hardware de bajo coste.
  • YARN (Yet Another Resource Negotiator): es el sistema de gestión de recursos del cluster Hadoop
  • Nodos Masters: Servidores que albergan los servicios de administración del cluster Hadoop:
    • NameNode: Encargado de administrar el almacenamiento HDFS.
    • SecundaryNameNode: Encargado de realizar los checkpoints (puntos de control) periódicos del NameNode.
    • ResourceManager: Supervisa la programación de tareas y gestiona los recursos del cluster Hadoop
  • Nodos Slaves: Servidores encargados de realizar el procesamiento y almacenamiento de los datos. Los servicios que albergan son los siguientes:
    • DataNode: Servicio de HDFS que permite al NameNode almacenar los bloques de datos en un SlaveNode.
    • NodeManager: Coordina los recursos para cada Slave Node y reporta la información el ResourceManager.
    • ApplicationMaster: Realiza el seguimiento del proceso de las tareas que se ejecutan en el cluster para una aplicación específica. Se despliega un ApplicationMaster por cada aplicación cliente.
    • Container: Colección de todos los recursos necesarios para ejecutar las tareas de una aplicación.

Especificaciones de las máquinas

En este tutorial, las máquinas de ejemplo que se utilizan tienen las siguientes especificaciones:

  • Plataforma: Máquina virtual sobre OpenStack
  • SO: Ubuntu Server 14.04
  • Cores: 2
  • RAM: 4GB
  • Disco: 40 GB

Software

La versión de Hadoop utilizada será Hadoop 2.6.0 (Apache Software Fundation)

Arquitectura

La arquitectura, en modalidad cluster que vamos a desplegar es la siguiente:

  • 1 Master Node (ResourceManager y NameNode):
    • hd-master
  • 3 Slaves Nodes (DataNode y NodeManger):
    • hd-slave1
    • hd-slave2
    • hd-slave3

Requisitos Iniciales

Incluimos el nombre FQDN de todos los nodos que conforman el cluster  en el fichero /etc/hosts:

Creamos el usuario y grupo hadoop:

Establecemos la relación de confianza SSH entre el MasterNode y los SlavesNodes:

Instalación de Java:

Inclusión de variables de entorno de Hadoop y Java en el fichero .bashrc del usuario hadoop:

Instalación y Configuración  de Hadoop

Antes de iniciar la instalación debemos conocer los ficheros de configuración disponibles en Hadoop y que se configura en cada uno de ellos:

Fichero Formato Descripción
hadoop-env.sh Bash script Variables de entorno que son usadas en los scripts que ejecutan Hadoop.
core-site.xml Hadoop configuration XML Configuración para Hadoop Core, como ajustes de I/O que son comunes para HDFS y MapReduce.
hdfs-site.xml Hadoop configuration XML Ajustes de configuración para los daemons de HDFS: NameNode, Secundary NameNode y DataNodes.
mapred-site.xml Hadoop configuration XML Ajustes de configuración para los daemons MapReduce: Jobtracker, Tasktrackers o YARN.
yarn-site.xml Hadoop configuration XML Ajustes de configuración específicos para YARN.
masters Texto Plano Lista de máquinas (una por línea) que iniciarán un Secundary NameNode.
slaves Texto Plano Lista de máquinas (una por línea) que iniciarán un DataNode y un NodeManager

A continuación, descargamos e instalamos Hadoop en el nodo master (después de realizar la configuración, la replicaremos en todos los nodos slaves)

Realizamos la configuración básica en el nodo Master:

Editamos /usr/local/hadoop/etc/hadoop/core-site.xml:

Editamos /usr/local/hadoop/etc/hadoop/hdfs-site.xml:

Editamos /usr/local/hadoop/etc/hadoop/mapred-site.xml:

Editamos /usr/local/hadoop/etc/hadoop/yarn-site.xml:

Editamos /usr/local/hadoop/etc/hadoop/slaves:

Creamos el directorio para almacenar los datos HDFS del NameNode:

Duplicamos la configuracion de Hadoop en todos los Slaves Nodes:

Creamos el directorio para almacenar los datos HDFS den DataNode:

Cambiamos configuración del NameNode por DataNode en todos los Slaves Nodes:

Damos formato al nuevo filesystem distribuido:

Iniciamos YARN/HDFS manualmente:

Master Nodes:

  Slaves Nodes:

Testing Cluster Hadoop

Creamos un directorio para almacenar los datos del usuario hadoop:

Subimos el directorio de los ficheros de configuración:

Comprobamos que se ha subido los datos correctamente:

Ejecutamos un trabajo de ejemplo:

Comprobamos la información del directorio output:

6.El fichero part-r-00000 contiene el resultado de nuestro trabajo:

Acceso Web a los Servicios Hadoop

Hadoop NameNode se levanta por defecto en el puerto 50070 del Master Node, es posible acceder a la información utilizando un navegador web.

namenode

Para obtener la información sobre el cluster y todas la aplicaciones, podemos acceder Resource Manager a través del puerto 8088 del Nodo Master:

resourcemanager

Y hasta aquí, con el cluster desplegado y funcionando, la primera experiencia Hadoop a modo de tutorial, posiblemente sigamos profundizando sobre este tema en próximos artículos.