Introdución a Hadoop

Publicado por

Hadoop surge por la necesidad cada vez mayor de disponer de espacio de almacenamiento ilimitado y poder guardar cualquier cosa, estructurada o no. Asociado a esto, se necesitan algoritmos que puedan procesar toda esta información en un tiempo razonable.

Hadoop tiene dos partes: una que se ocupa del almacenamiento de datos de distintos tipos (HDFS) y otra que realiza las tareas de procesamiento de los datos de manera distribuida (MapReduce).

Hadoop utiliza una arquitectura distribuida de maestro-esclavo. El maestro en HDFS se denomina NameNode, es el encargado de conocer como se encuentran los datos almacenados por el cluster. Los esclavos en HDFS se denominan DataNodes que son los encargados de almacenar físicamente los datos en el cluster.

Ampliando la definición para el Namenode decir que almacena los metadatos sobre los ficheros que existen en nuestro entorno distribuido. Para un fichero almacenado en hdfs existiran varias entradas en forma de metadatos que indican:

  • Los identificadores de los bloques en disco que lo componen.
  • Nodos en los que se encuentran los bloques.

Tamaño de bloque: por defecto en la configuración es de 64Mb y puede escalar hasta los 256Mb. Los bloques no se llenan completamente. Solo ocupan lo que el fichero necesite, de esa manera en un mismo bloque podría existir más de un fichero.

Al ser una arquitectura distribuida para mantener la disponibilidad y persistencia de los datos en todo momento, cada vez que se carga un fichero en HDFS se realizan por defecto tres copias en distintos nodos, este parámetro es configurable aunque no se recomienda modificarlo.

El demonio más importante que corre en el nodo maestro es el jobTracker que se encarga de gestionar los recursos y monitorizar el avance los trabajos. El demonio más importante de los nodos esclavos es el TaskTracker encargado de realizar las tareas dentro de un nodo encargadas por un job.

En la primera versión el JobTracker estaba limitado a un cluster de 4000 nodos y los jobs que se podían llevar a cabo eran los de Map y los de Reduce.

JobTracker:
– Trabaja en el nodo maestro, y solo existe uno por cluster.
– Maneja los trabajo MapReduce, se encarga de la gestión de recursos y de gestionar las tareas de los TaskTracker.

TaskTracker
– Estos demonios corren sobre los nodos esclavos y existe uno por cada nodo.
– Inicia y monitoriza las tareas de Map y de Reduce.

YARN(Yet Another Resource Name)

Debido a las limitaciones del jobTracker en la versión 1.0 de Hadoop se creo YARN un gestor de recursos que soporta un cluster con un número mayor de nodos ya que las funciones del jobTracker se han divido en varios elementos. y también permite la ejecución de otros jobs distintos de los de Map y Reduce. Sus dos principales nodos son:

  • Nodo maestro: Resource Manager. Se inicia solo uno por cluster. Se encarga de gestionar y repartir los recursos entre las aplicaciones del sistema.
  • Nodos esclavos: NodeManager. Existe una única instancia por cada nodo de trabajo.

Estos nodos se encargan de organizar la coordinación de servicios de procesamiento (Application Master) y almacenamiento (hdfs).

Otros demonios importantes de YARN son:

  • ApplicationMaster: Tiene una instancia por cada aplicación en cada nodo. Es el encargado de la negociación de recursos entre el ResourceManager y el NodeManager.

  • Container: se ejecutan sobre los NodeManager. Es un conjunto de recursos asignados a una aplicación para realizar las tareas que tiene asignadas.

  • JobHistory: existe una única instancia por cluster. Almacena las métricas y metadatos de las tareas ejecutadas.

Arquitectura YARN:

diapositiva1

Pasos para la realización de un job

Cuando se realiza el envío de un trabajo/job en YARN esto es lo que ocurre:

  1. Solicitar al Resource Manager un identificador de aplicación.
  2. Realizar comprobaciones entre el cliente y HDFS. Por ejemplo: directorio de salida y entrada, los input splits, etc…
  3. Desde el cliente se copian los recursos necesarios en hdfs. Ej: el jar del job, ficheros de configuración, información sobre los split.
  4. El cliente comunica al Resource Manager que inicie el job.
  5. El Resource Manager crea un container en el node manager y lanza el Application Master.
  6. El Application Master inicia el job creando las estructuras que sirven para monitorizar el progreso del job.
  7. El Application Master lee la información sobre los input split en HDFS.
  8. El Application Master crea un task map por cada split y tantos task reduce como venga indicado en la configuración.
  9. El Application Master pide container para todas las task cerradas en el Resource Manager.
  10. El Resource Manager busca el mejor container(1) para las task map y le asigna los recursos al Application Master.
  11. El container busca los recursos que necesita. (jar, config files, …)
  12. El container arranca su task map o reduce.

(1)El RM para cada task map intenta que los vínculos del dato local se cumplan, esto quiere decir que intentará que la task corra sobre el nodo donde residen los datos. Como alternativa a este nodo utilizaría uno situado en el mismo rack.

Cada recurso asignado a una task es de 1Mb de RAM y un core de la máquina.

Dezyre Hadoop Arquitecture

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s