A lo largo de este blog os he contado muchas cosas sobre bases de datos, programación en diversos lenguajes, y también de Big Data, uno de los temas más fascinantes si te gustan los datos. Yo, desgraciadamente, no he tenido opciones laborales de trabajar con herramientas de Big Data, y en mi labor investigadora en la Universidad, algunas herramientas me vendrían bien.
Concretamente, desde hace varios años está de moda Map Reduce, que fue puesto de moda desde Google, el gran gigante de los datos (y a los que dedicaré varias entradas).
Map Reduce es el paradigma de computación en paralelo sobre grandes colecciones de datos, y se basa en dos funciones: map y reduce, muy común en muchos lenguajes de programación como en #Python.
El más clásico de los ejemplos de MapReduce es el conteo de palabras dentro de un texto para analizar qué es lo más repetido.
Google y el PageRank
Google fue el impulsor de este modelo para implementar el cálculo de PageRank, que es un algoritmo a aplicar a las páginas web para el cálculo de la relevancia.
Cómo la implementación de este modelo no es a un conjunto de datos, sino al global de todas las web, es necesario tener un sistema de distribución de ficheros, con lo que antes de empezar, ya tenemos planteado un problema serio: cómo organizar la información.
La lectura y procesamiento de datos
Ejecutar un proceso por parte de una CPU es un proceso que implica, primero, leer la información de disco a memoria, para acto seguido, aplicar el algoritmo. Este “simple” proceso, puede ser terriblemente lento cuando el volúmen de datos es grande (cómo en el caso del cálculo de PageRank), porque cargar datos en memoria lleva tiempo (unos cuantos de datos es rapidísimo, pero cuando nos vamos a varios millones de datos, ….. ummm….. ya no es tan rápido).
El motivo de cargar los datos desde disco a memoria se debe a que es en la memoria donde se ejecuta el algoritmo, pero una vez cargados, pueden usarse tantas veces como sea necesario. Pero … ¿y si el volúmen de datos es tan grande que no puede ser cargado ni siquiera en memoria? Si, esto también puede suceder. Aquí es donde la minería de datos o Data Mining, que permite cargar porciones de datos a la memoria, procesarlos, volcar los resultados a discos, y volver a cargar nuevos datos, …. y así hasta procesar todos. Pero incluso este proceso, tiene la limitación del ancho de banda.
Evidentemente, para el escenario que aquí estamos pintando, queda claro que necesitaremos varios discos y varias CPUs para ejecutar el trabajo, en paralelo. Por tanto, la infraestructura para ejecutar el trabajo no es factible para cualquier empresa, sino que hay que tener cierto tamaño y físicamente espacio donde albergar los servidores y discos necesarios para la tarea.
Pocas empresas pueden presumir de ello, siendo las más importantes Google, Amazon, Yahoo, Microsoft.
Pero este modelo no es perfecto, pues aun teniendo 1 millón de servidores (es lo que se estima que tiene Google), existirán fallos, por lo que es necesario distribuir la información para que sea persistente y aún con fallos, los datos sigan estando disponibles, y en caso de fallo, que el proceso o procesos sigan trabajando. Afortunadamente, estos fallos solo afectan a estas compañías (también supongo que esto que he contado es bastante superficial respecto a los problemas reales derivados de estas infraestructuras).
MapReduce ayuda a solventar cloud computing
Y lo hace desafiando las 3 grandes cuestiones que hasta ahora hemos planteado:
- Almacenar datos redudantes en múltiples nodos para asegurar la persistencia y disponibilidad.
- Realizar los cálculos cerca de los datos para minimizar el movimiento de los datos.
- Aplicar un modelo simple de programación para ocultar la complejidad que todo esto supone.
Es indispensable utilizar un Sistema de ficheros distribuidos para manejar este problema, como Google GFS o Hadoop HDFS, pero además, es casi necesario que los datos sean raramente actualizados (es decir, que no cambien nunca, o casi nunca), pero que si sean muy frecuentes lecturas de datos, y adiciones de nuevos datos.
MapReduce, simple pero complejo
Cómo podrás deducir, el algoritmo MapReduce es simple en concepto, pero con muchas complicaciones intrínsecas por su ejecución, por los problemas que implican disponer de elevados volúmenes de datos, etc, etc, ….
Un saludo, y buen día