Fundamentos de Apache Hadoop y MapReduce
Apache Hadoop es un framework de código abierto que permite el procesamiento distribuido de grandes conjuntos de datos en varios clusters de ordenadores, pero que a ojos del usuario parece un único ordenador. Hadoop separa y distribuye automáticamente los archivos que contienen los datos, además de dividir el trabajo en tareas más pequeñas y ejecutarlas de manera distribuida y recuperarse de posibles fallos automáticamente y de forma transparente al usuario. El proyecto Apache Hadoop consta de los siguientes módulos:
- Hadoop Common: proporciona el acceso a los sistemas de archivos soportados por Hadoop y contiene el código necesario para poder ejecutar el framework. Además, se pone a disposición del usuario el código fuente y la documentación necesaria para aprender a utilizar la herramienta.
- Hadoop Distributed File System: HDFS es un sistema de ficheros distribuido altamente tolerante a fallos y diseñado para utilizarse en hardware de bajo coste. Proporciona un alto rendimiento en el acceso a datos y se adapta sin dificultad a aplicaciones con grandes conjuntos de datos. Fue desarrollado originalmente para el proyecto Apache Nutch, un motor de búsquedas web.
- Hadoop YARN (Yet Another Resource Negociator): YARN es una tecnología de gestión de clusters. Se compone de un gestor de recursos central y un gestor por cada nodo, que se ocupa de controlar un único nodo.
- Hadoop MapReduce: fue desarrollado para hacer frente a problemas de manera distribuida, los cuales comparten ciertas similitudes pero que requieren desarrollos completos desde el inicio. En datos distribuidos es común tener dos fases: fase de mapeado (map phase) y fase de reducción (reduce phase). La fase de mapeado trabaja sobre datos sin procesar y produce valores intermedios que pasan a la fase de reducción para producir la salida final de MapReduce. Con esta tecnología se evita el tener que diseñar distintos modelos para resolver problemas similares.
Funcionamiento de MapReduce
El paradigma de MapReduce se basa en enviar el proceso computacional al sitio donde residen los datos que se van a tratar, los cuales se coleccionan en un cluster Hadoop. Cuando se lanza un proceso de MapReduce se distribuyen las tareas entre los diferentes servidores del cluster y, es el propio framework Hadoop quien gestiona el envío y recepción de datos entre nodos. Mucha de la computación sucede en los nodos que tienen los datos en local para minimizar el tráfico de red. Una vez se han procesado todos los datos, el usuario recibe el resultado del cluster. Basicamente Hadoop se ocupa de todo.
Se puede decir que MapReduce es un modelo de programación para computación distribuida basado en Java, pero que también se puede desarrollar en otros lenguajes de programación. Contiene dos fases, aunque la segunda se subdivide en otras dos:
- Map.
- Reduce: barajado de datos y reduce.
Si un programa está desarrollado correctamente, puede perfectamente escalar en cuanto a tratamiento de datos de 1MB a 1TB sin ningún problema.
Un ejemplo de aplicación de MapReduce es obtener las diferentes palabras de un texto y el número de veces que aparecen. Como entrada de datos, MapReduce recibe el texto y automáticamente lo separa en diferentes fragmentos, tal y como se aprecia en la imagen anterior. Dichos fragmentos podrían ser las diferentes líneas del texto, las cuales se van a mapear para obtener las palabras que forman dicha línea. Puede que se tenga una palabra dos veces, por lo que se unirán en el proceso de combinado. Si hay dos palabras iguales, serán dos en total. A continuación, en el barajado y reordenación de los datos se combinarán los datos de todos los fragmentos, para luego hacer la reducción y devolver un resultado.
Esto es todo por este artículo. ¡Saludos!