Searching...
lunes, 1 de agosto de 2016

Modelos de programación de Big Data

Hemos visto que ahora es posible el procesamiento escalable en Internet para conseguir la escalabilidad de datos en paralelo en las aplicaciones de Big Data, gracias a los clusters básicos (commodity clusters). Estos clusters básicos rentables, junto con los avances en los sistemas de ficheros distribuidos, que desplazan el procesamiento a donde están los datos, proporcionan la posibilidad de llevar a cabo análisis escalables de grandes volúmenes de datos. Lo siguiente de lo que voy a hablar es de como podemos sacar provecho a estos avances en la infraestructura.
Modelo de Programación de Big Data
¿Cuales son los modelos de programación adecuados? Un modelo de programación es una abstracción de un mecanismo o infraestructura existente. Es un conjunto de bibliotecas abstractas de ejecución y de lenguajes de programación que forman un modelo de procesamiento. Este nivel de abstracción puede ser de bajo nivel, como el lenguaje de máquina de los ordenadores, o muy alto, como en lenguajes de programación de alto nivel, como Java. Por lo tanto, se puede decir que si la infraestructura que permite el análisis de grandes volúmenes de datos son los sistemas de ficheros distribuidos, tal y como hemos mencionado, entonces el modelo de programación de Big Data debe permitir la programación de las operaciones dentro de un sistema de ficheros distribuidos. Esto significa que debe ser posible escribir programas de ordenador que funcionen de manera eficiente sobre los sistemas de ficheros distribuidos utilizando Big Data y que faciliten la gestión de los posibles problemas que puedan presentarse.

Basándonos en todo lo que hemos tratado hasta ahora, voy a definir los requisitos de los modelos de programación de Big Data.

En primer lugar, este modelo de programación de Big Data debe soportar las operaciones habituales de Big Data, como dividir grandes volúmenes de datos (split), lo que significa particionar y colocar datos dentro y fuera de la memoria del equipo junto con un modelo para sincronizar los conjuntos de datos más adelante. Debe ser posible acceder a los datos de una manera rápida. Debe permitir una rápida distribución a los nodos dentro de un rack, y estos son potencialmente los nodos de datos donde se ha trasladado el procesamiento. Esto significa la planificación simultanea de muchas tareas en paralelo.

Debe también posibilitar la fiabilidad del procesamiento y la tolerancia completa a fallos. Esto significa que debe permitir réplicas programables y recuperación de ficheros cuando sea necesario. Debe ser fácilmente escalable a los nodos distribuidos en los que se producen los datos.

Debe también posibilitar la adición de nuevos recursos (racks) para aprovechar los equipos distribuidos y escalar a más datos o a datos más rápidos sin degradación del rendimiento (escalabilidad).

Puesto que existe una gran diversidad de tipos diferentes de datos, tales como documentos, gráficos, tablas, clave-valor, etc., un modelo de programación debe poder efectuar operaciones sobre un conjunto particular de estos tipos. Un modelo determinado puede que no soporte todos los tipos de datos, pero los modelos deben estar optimizados para soportar al menos uno de los tipos.

¿Se está complicando un poco? No tiene porque. De hecho, aplicamos modelos similares en nuestra vida diaria en tareas cotidianas. Veamos un escenario donde es posible que estemos aplicando sin saberlo este modelo.

Imagina que un sábado tranquilo por la tarde recibes una llamada telefónica de una amiga que te dice que va a llegar a tu casa en una hora para la cena. Parece que se te ha olvidado por completo que habías invitado a tus amigos a cenar, de modo que dices que lo estás deseando y te diriges a la cocina. Como solución rápida decides cocinar pasta con un poco de salsa de tomate. Necesitas sacar ventaja de la paralelización para que la cena esté lista a la hora a la que llegan tus invitados, que es en menos de una hora. Llamas a tu pareja y a tus hijos para que se pongan manos a la obra en la cocina. Ahora es necesario darles instrucciones para que comiencen a cortar en trocitos los ingredientes, pero con las prisas terminas mezclando las cebollas, los tomates y los pimientos. En lugar de empezar por separarlos, les das a cada uno un lote mixto al azar de diferentes tipos de verduras. Tus ayudantes están obligados a utilizar sus competencias de "procesamiento" para cortar las verduras. Deben asegurarse de no mezclar los diferentes tipos de verduras. Cuando todo el mundo ha terminado de cortar, necesitas agrupar las verduras por sus tipos. Le pedimos a cada ayudante que recoja los elementos del mismo tipo, los ponga en un recipiente grande y etiquete este recipiente grande con la suma de los pesos individuales del recipiente, con los tomates en un recipiente, los pimientos en otro y las cebollas en el tercer recipiente. Al final tienes unos bonitos cuencos grandes marcados con el peso total de cada verdura. Tus ayudantes no tardan en terminar su trabajo mientras tú te centras en coordinar sus acciones y en otras tareas de la cocina. Ya puedes empezar a cocinar la pasta. 

Lo que acabamos de ver es un ejemplo excelente de modelado de Big Data en acción, solo que en realidad los datos de tú cocina son tratados por procesadores humanos. Este escenario puede modelarse mediante un modelo de programación para Big Data denominado MapReduce.

MapReduce es un modelo de programación de Big Data que soporta todos los requisitos de modelado de grandes volúmenes de datos que hemos mencionado. Puede modelar el procesamiento de datos de gran tamaño, dividir problemas complejos en diferentes tareas independientes en paralelo y hacer un uso eficiente de clusters básicos y sistemas de ficheros distribuidos de gran tamaño. Además, abstrae los detalles de la paralelización, tolerancia a fallos, distribución de datos, monitorización y balanceo de carga. Se ha implementado como modelo de programación en algunos frameworks diferentes de Big Data. En próximos artículos tratare sobre los detalles de MapReduce y como funciona su implementación Hadoop.

Resumiendo:

Los modelos de programación de Big Data son abstracciones sobre los sistemas de ficheros distribuidos. Los modelos de programación deseables de Big Data deben gestionar grandes volúmenes de datos heterogéneos, soportar la tolerancia a fallos y proporcionar la funcionalidad de escalabilidad. MapReduce es uno de estos modelos, que está implementado en diversos frameworks, incluyendo Hadoop. Voy a resumir el funcionamiento interno de la implementación Hadoop en un próximo artículo.


0 comentarios:

Publicar un comentario

Gracias por participar en esta página.

 
Back to top!