Computación distribuida con Hadoop II

vie, 05 feb 2010 by Foron

Continúo la serie de posts sobre Hadoop describiendo, muy por encima, los componentes y la estructura que suelen tener este tipo de sistemas. Como ya he dicho en otros posts, este blog pretende ser sobre todo práctico, así que no me voy a extender demasiado.

Gráficamente un cluster Hadoop se puede parecer mucho a esto:

Infraestructura Hadoop

JobTracker:

En un cluster hay un único JobTracker. Su labor principal es la gestión de los TaskTrackers, entre los que distribuye los trabajos MapReduce que recibe. Es, por lo tanto, el interfaz principal que tienen los usuarios para acceder al cluster.

TaskTracker:

Un cluster tiene n TaskTrackers que se encargan de la ejecución de las tareas map y reduce en los nodos. Cada uno de los TaskTrackers gestiona la ejecución de estas tareas en una máquina del cluster. El JobTracker se encarga, a su vez, de controlarlos.

NameNode:

Las funciones principales del NameNode son el almacenamiento y la gestión de los metadatos del sistema de ficheros distribuido y ofrecer el interfaz principal que tiene el usuario para acceder al contenido HDFS. En un cluster hay un único proceso NameNode.

Sin los metadatos que mantiene el NameNode no se sabría en qué nodo está cada bloque, además de perderse la información sobre la estructura de directorios. Es, por lo tanto, el componente más importante del cluster, y debe estar redundado. Hadoop no ofrece de manera nativa ningún mecanismo de alta disponibilidad, pero sí dispone de herramientas que permiten replicar la información. Entre ellas está el NameNode secundario, que permite guardar una copia de los metadatos (en realidad hace más cosas) en una máquina diferente al NameNode. Eso sí, no es una copia en tiempo real, y no ofrece failover automático en caso de fallo del primario. Para esto necesitamos usar otro tipo de herramientas, entre las que destacan DRBD y Heartbeat.

DataNode:

Estos procesos ofrecen el servicio de almacenamiento de bloques para el sistema de ficheros distribuido. Son coordinados por el NameNode.

Estos son los procesos principales del sistema, pero hay otros, como el Balancer, que se encarga de equilibrar la distribución de los bloques entre los DataNodes, por ejemplo cuando se añade un nuevo servidor.

Mi laboratorio se limita a cuatro servidores: un NameNode+JobTracker y tres DataNode+TaskTracker, en cuatro máquinas virtuales de un core y 1G de memoria, para un total de 5G de almacenamiento.

  hadoop@fn140:/usr/local/hadoop/conf$ hadoop dfsadmin -report
  Configured Capacity: 8695013376 (8.1 GB)
  Present Capacity: 5455364096 (5.08 GB)
  DFS Remaining: 5455290368 (5.08 GB)
  DFS Used: 73728 (72 KB)
  DFS Used%: 0%
  Under replicated blocks: 0
  Blocks with corrupt replicas: 0
  Missing blocks: 0

  -------------------------------------------------
  Datanodes available: 3 (3 total, 0 dead)

  Name: 192.168.10.142:50010
  Decommission Status : Normal
  Configured Capacity: 2898337792 (2.7 GB)
  DFS Used: 24576 (24 KB)
  Non DFS Used: 1079918592 (1.01 GB)
  DFS Remaining: 1818394624(1.69 GB)
  DFS Used%: 0%
  DFS Remaining%: 62.74%
  Last contact: Sun Jan 31 16:10:58 CET 2010


  Name: 192.168.10.143:50010
  Decommission Status : Normal
  Configured Capacity: 2898337792 (2.7 GB)
  DFS Used: 24576 (24 KB)
  Non DFS Used: 1080020992 (1.01 GB)
  DFS Remaining: 1818292224(1.69 GB)
  DFS Used%: 0%
  DFS Remaining%: 62.74%
  Last contact: Sun Jan 31 16:10:58 CET 2010


  Name: 192.168.10.141:50010
  Decommission Status : Normal
  Configured Capacity: 2898337792 (2.7 GB)
  DFS Used: 24576 (24 KB)
  Non DFS Used: 1079709696 (1.01 GB)
  DFS Remaining: 1818603520(1.69 GB)
  DFS Used%: 0%
  DFS Remaining%: 62.75%
  Last contact: Sun Jan 31 16:10:56 CET 2010

En los próximos dos posts voy a dejar la "teoría" para pasar a la práctica, empezando por una de las aplicaciones más obvias de Hadoop, como es el tratamiento de logs; para seguir por una de las utilidades que existen para facilitar el desarrollo de aplicaciones MapReduce: pig.


Comments