Recuerda que puedes descargarte algunos de los ejemplos en la pestaña de Código Fuente
Mostrando entradas con la etiqueta NameNode. Mostrar todas las entradas
Mostrando entradas con la etiqueta NameNode. Mostrar todas las entradas

jueves, 31 de enero de 2013

El Clúster Hadoop y sus 5 demonios


Una vez que hemos visto teóricamente qué es Hadoop y sus dos partes principales HDFS y MapReduce, vamos a ver quién hace que todo esto funcione.

Un Clúster Hadoop es un conjunto de máquinas donde se ejecuta HDFS. Cada máquina es un nodo del clúster. La ventaja de este tipo de sistemas distribuídos es que las máquinas pueden ser de bajo coste y que la infraestructura puede escalar de forma horizontal facilmente.

Un Clúster puede tener como poco un sólo nodo y como máximo varios miles (hasta 30 000 a día de hoy según la web de Apache). Cuantos más nodos, mejor rendimiento.

Para que Hadoop funcione hay 5 demonios que lo manejan repartidos en dos tipos de máquinas.
Los 5 demonios son:
  • NameNode
  • Secondary Namenode
  • DataNode
  • JobTracker
  • TaskTracker

Cada demonio se ejecuta en su propia máquina virtual de Java (JVM)

Y los dos tipos de máquinas son:
  • Master Node: Que incluye el NameNode, el Secondary NameNode y el JobTracker
  • Slave Node: Que incluye los DataNode y el TaskTracker.

Algo muy importante que hay que tener claro es que no es lo mismo HDFS que MapReduce, en una aplicación Hadoop participan las dos partes, y quizás varios de los demonios se están ejecutando en las mismas máquinas, pero hay que tener claro que no son lo mismo, cuál pertenece a qué parte y cómo funcionan.

Demonios Hadoop

Antes de empezar a describir los distintos demonios estaría bien aclarar la terminología:

  • Job: Es una ejecución completa de una aplicación. La ejecución de todos los Mappers y Reducers de todos los datos.
  • Task: Es la ejecución de un sólo Mapper o de un sólo Reducer sobre un conjunto de datos.


NameNode

Es el nodo máster encargado de gestionar el namespace del sistema de ficheros.
También se encarga del mantenimiento de los metadata de todos los ficheros y directorios que forman parte del sistema HDFS.

Conoce los DataNodes del clúster y sabe cómo están repartidos en estos DataNodes los diferentes bloques que pertenecen a un fichero.

Todos los metadata los tiene en RAM para acceder más rápido, aunque también existe una copia de esta información en el disco duro (de esta forma, no se pierden estos metadata si se apaga el NameNode),

Tiene dos funciones:

Por un lado, cuando llega un nuevo fichero, es quien se encarga de decir qué bloques van y dónde en el clúster. No hay movimiento de datos a través del NameNode, sino que ese fichero se particiona y los bloques van directamente a guardarse en los DataNodes. Luego el NameNode actualiza su metadata.

Por otro lado, cuando una aplicación cliente quiere leer un fichero ésta se comunica con el NameNode para determinar qué bloques forman el fichero y dónde están y posteriormente ir a buscarlos a los DataNodes correspondientes.

Si el NameNode deja de funcionar, el sistema no puede seguir usándose. Y si además el NameNode se destruye, todos los datos del clúster se perderían ya que no habría forma de reconstruir los ficheros en base a los bloques que se encuentran en los DataNodes (a no ser que tengamos una copia de seguridad de los metadata de HDFS en otro servidor).

Secondary Namenode

Este demonio causa un poco de confusión, ya que a primera vista parece una copia de seguridad o backup del NameNode, pero hay que tener mucho cuidado, ya que NO lo es.

Su papel consiste en realizar una tarea de mantenimento de los ficheros de metadata del NameNode (consolidando el fichero "fsimage" con el fichero de logs "edits").

También hay que decir que hay un cambio entre la versión CDH3 y la versión CDH4 de Hadoop.
En la versión CDH3, sigue siendo el Secondary NameNode que se encarga tan sólo de tareas de mantenimiento del NameNode.
En la versión CDH4, se introduce un nuevo concepto: la Alta Disponibilidad. Si esta está activa, el Secondary NameNode desaparece y pasa a ser el Standby NameNode.

DataNode

Los DataNode son los nodos encargados de almacenar los bloques de datos en el clúster Hadoop.
Almacenan los bloques e informan periódicamente al NameNode las listas de bloques que están almacenando.

Cuando un cliente quiere leer un fichero, primero se comunica con el metadata del NameNode quien le dice dónde están y cómo se distribuye el fichero a leer.
Luego el cliente pasaría a conectarse directamente con los DataNode correspondientes sin que los datos pasen por el NameNode.

JobTracker

Se encarga de gestionar todo el Job (uno o varios) que ha solicitado un cliente.
Es decir, cuando recibe la petición, asigna tareas (task) Map y Reduce a los nodos del clúster.

También se encarga de saber cuáles son TaskTracker existentes. En caso de fallo de un TaskTracker, recupera las tareas map o reduce que ejecutaba ese TaskTracker y las asigna a otro.

Finalmente, gestiona el scheduling entre los distintos jobs MapReduce.

TaskTracker

Cada nodo ejecuta un demonio del TaskTracker, y es el responsable de crear instancias del Map o del Reduce  y de reportar la situación del proceso al JobTracker.

Para disfrutar de la localización de los datos, es imprescidible que el TaskTracker esté instalado en cada nodo que contenga un DataNode.


Por último vamos a ver que existen tres modos de ejecutar un cluster Hadoop:

  • Local: No se usa HDFS, sino el sistema de ficheros nativo del ordenador. Todo Hadoop se ejecuta en un único ordenador. Tampoco existe ningún demonio MapReduce. Cuando un cliente ejecuta un Job MapReduce en este modo el programa cliente "contiene" el demonio JobTracker y TasckTracker.
  • Pseudo-Distribuído: En una máquina tienes los cinco demonios funcionando.
  • Distribuído: Dispones de un clúster de dos o más nodos con los demonios separados en Master Nodes y Slave Nodes y funcionando en paralelo.