Recuerda que puedes descargarte algunos de los ejemplos en la pestaña de Código Fuente

viernes, 11 de enero de 2013

Introducción a Hadoop

En esta (mi primera) entrada voy a realizar un pequeño resumen de qué es Hadoop y sus componentes. Quizás muchos de los que lleguéis hasta aquí ya sabéis cuál es la historia de Hadoop, Doug Cutting y el peluche en forma de elefante. Pero creo que un blog hay que empezarlo por donde se debe, el principio, y al fin y al cabo el principio de Hadoop es entender de dónde viene, sus conceptos básicos, sus componentes, sus características y el por qué de su existencia.

¿Qué es Hadoop?

Hadoop es una tecnología open source perteneciente a la Apache Software Fundation inspirado en el sistema de ficheros de Google (GFS) y en el modelo de programación MapReduce.
De las tres empresas (HortonWorks, MapR y Cloudera) que se dedican a Hadoop, Cloudera es la referencia a nivel mundial en soluciones BigData Hadoop

Ha llegado un momento en el que muchas organizaciones tienen que tratar diariamente enormes cantidades de datos llegando a terabytes, petabytes e incluso a exabytes, para lo cual los sistemas tradicionales de computación a gran escala (sean sistemas monolíticos o sistemas distribuídos tipo MPI) se están quedando cortos y empiezan a sufrir varios cuellos de botella.

Hadoop ofrece un cambio radical en la computación distribuída y se le considera como una estrategia completamente nueva a la hora de gestionar y tratar todos estos datos. Además ofrece otras ventajas como la tolerancia a fallos, la recuperabilidad de los datos y de los componentes, la consistencia y la escalabilidad.

Su concepto base se puede resumir en que los datos no van al programa, sino que el programa va a los datos. Gracias a esta premisa el tiempo de computación es considerablemente menor.

Hadoop se compone de dos partes principales:
  • El Hadoop Distributed File System (HDFS): Se trata de un sistema de ficheros responsable de almacenar los datos en el clúster dividiéndolos en bloques y distribuyéndolos a través de los nodos del clúster.
  • MapReduce: Es un modelo de programación encargado de distribuir una tarea por diversos nodos del clúster y procesar los datos que se encuentran en esos nodos. Consta de dos fases: Map y Reduce.
En otras entradas explicaré más detalladamente cada una de estas partes.

Ventajas que ofrece Hadoop respecto a los sistemas distribuídos tradicionales:
  • Tolerancia a fallos parciales: Si falla un elemento del sistema (un nodo) Hadoop es capaz de recuperarse mediante distintas técnicas.
  • Recuperabilidad de los datos: Si un componente del sistema falla el resultado no será la pérdida de ningún dato, el sistema es capaz de recuperarlo.
  • Recuperación de componentes: Si un componente del sistema falla y luego se recupera, tendrá que ser capar de volver a unirse al sistema sin tener que reiniciar todo el sistema.
  • Consistencia: Si un componente falla durante la ejecución de un trabajo, Hadoop tiene medios para que este fallo no afecte a la salida de la ejecución.
  • Escalabilidad: Añadir nuevos componentes es transparente al resto del sistema y estos componentes deben unirse al cluster sin ningún tipo de problema.
  • Otra ventaja puede considerarse el bajo coste: Está preparado para ejecutarse en clústeres de ordenadores que no requieren una potencia demasiado alta. También teniendo en cuenta que Hadoop es una tecnología Open Source.
Finalmente, se pueden considerar los conceptos básicos de Hadoop los siguientes:
  • Las aplicaciones se escriben en lenguajes de alto nivel (Java)
  • Su política es de comunicación prácticamente nula entre nodos.
  • Los datos se extienden por el sistema al principio dividiéndose en bloques de 64Mb o 128Mb.
  • Las tareas Map trabajan sobre cantidades pequeñas de datos, normalmente un bloque.
  • Cuando un cliente hace una petición de lectura, las tareas Map se ejecutan en los nodos donde se encuentran los bloques.
  • Si un nodo falla, el máster lo detecta y reasigna el trabajo a otro nodo.
  • Reiniciar una tarea no afecta al resto de tareas que se están ejecutando sobre otros nodos.
  • Si se reinicia un nodo fallido, éste se unirá automáticamente al sistema y empezará a asignársele tareas.
  • Si un nodo es lento, el máster puede ejecutar otra instancia de la misma tarea.

5 comentarios:

Gracias por dejar vuestras sugerencias, dudas, críticas o comentarios en general