Hadoop: Arquitectura

Comenzamos aquí una serie de posts para presentar, de manera sencilla, clara y breve, las principales características, componentes y arquitecturas relacionadas con los sistemas Big Data actuales. Este primer post versa sobre Hadoop.
Empecemos recordando algunos términos básicos. Un sistema distribuido consta de nodos, donde cada uno de ellos es un ordenador. A un conjunto de nodos almacenados físicamente y conectados en el mismo switch de red, se llama rack. Lógicamente el ancho de banda entre dos nodos de un mismo rack será muchísimo mayor que si están en diferentes racks. Un cluster de Hadoop es una colección de racks.

Hadoop tiene dos principales componentes en su arquitectura:
  • HDFS (Hadoop Distributed File System): sistema de ficheros distribuidos
  • MapReduce : Framework para realizar operaciones sobre los datos del HDFS

HDFS se ejecuta sobre todos los nodos de un cluster Hadoop, y está diseñado específicamente para gestionar eficientemente replicación de datos, obteniendo así un alto porcentaje de tolerancia a fallos. Hadoop funciona mejor sobre ficheros de gran tamaño ya que así debe gastar menos tiempo en buscar los fragmentos en los discos. Su diseño se beneficia de accesos secuenciales o por streaming, en vez de aleatorios. 
Hadoop usa bloques (tamaño por defecto: 64 Mbs, aunque la mayoría de sistemas reales usan 128Mbs o más) para almacenar las partes de un fichero. Estos bloques son de tamaño fijo y esto es una gran ventaja para calcular cuántos se necesitan según lo que ocupan nuestros ficheros, y además es sencillo relativamente situarlos en distintos clusters. Los bloques son replicados en múltiples nodos, asegurando así que si un cluster falla se recupera desde otro cluster. Existen múltiples parámetros de configuración en Hadoop que permiten ajustar eficientemente estas situaciones.

MapReduce se diseñó para procesar enormes conjuntos de datos en entornos distribuidos, usando muchísimos nodos. Como su nombre indica, un programa MapReduce consiste en dos transformaciones básicas, aplicadas a los datos de forma continuada: asignar (Map) y reducir (Reduce).

Pero, ¿qué componentes internos tiene HDFS más concretamente, y cómo usan todos ellos y qué papel juegan, cuando se ejecuta algún MapReduce job?
Podríamos clasificar en HDFS, las siguientes tipologías principales de nodos:
  • NameNode :  sólo existe uno en el cluster e informa del estado del contenido al resto, ya que contiene los metadatos de los distintos ficheros del cluster. Se recomienda asignarle la máxima RAM posible, para agilizar la gestión de dichos metadatos del sistema.
  • DataNode : almacén de Datos. Un típico cluster HDFS tiene muchos DataNodes.
  • Secondary NameNode : nodos auxiliares para el NameNode.
  • JobTracker : sólo existe uno en el cluster y recibe peticiones de clientes para gestionar las tareas MapReduce en los correspondientes TaskTrackers.
  • TaskTracker : nodo donde residen los datos de los jobs y se monitorizan para en caso de fallo, reasignar algún otro TaskTracker. Usan JVMs (máquinas virtuales Java) para correr la tarea de asignación o reducción. Son claves para la ejecución en paralelo de tareas.
  • Checkpoint Node : nodos generales de control.
  • Backup Node : almacén de copias de seguridad.
Cuando algún proceso cliente inicia una petición, lo atiende un JobTracker, aunque también puede comunicarse directamente con un NameNode o DataNode para recuperar partes de un fichero.


1 comentario :

Buscar en el Blog: