Las tres características principales de los datos que hacen necesario aplicar técnicas de Big Data en un proyecto de análisis de datos son: Grandes volúmenes de datos, la necesidad de procesar esos datos de manera rápida, y el uso de tipos de datos complejos.

En cualquier caso, eso se traduce en la necesidad de una gran capacidad computacional, para así poder satisfacer los requerimientos analíticos de los usuarios.

Un gran problema

El hecho de trabajar con grandes volúmenes de datos, de tener que procesar un conjunto de datos a una gran velocidad o de tratar con tipos de datos complejos que requieren de cálculos intensivos para poder obtener información de éstos, supone una dificultad que Big Data debe resolver.

En una solución de Business Intelligence (BI) tradicional, se trabaja en la gran mayoría de casos con una arquitectura basada en un único servidor. Este servidor, a pesar de poder ser multi-core, no puede paralelizar una tarea a alto nivel, con lo que debe asumir toda la carga computacional. El resultado es la ejecución de largos procesos para resolver cálculos analíticos o simplemente para procesar los datos que van llegando al sistema analítico.

Computación distribuida

En cambio, Big Data se basa en el paradigma de la computación distribuida. Es decir, existe una red computacional (llamada cluster), formada por un conjunto de ordenadores (llamados nodos), que trabajan de manera organizada y colaborativa para resolver el mismo problema.

El proceso es el siguiente: Cuando una tarea llega al cluster de Big Data, ésta se descompone en un conjunto de subtareas, que son asignadas a los distintos nodos del cluster. Los nodos trabajan entonces en paralelo (a la vez) en cada una de sus tareas, con lo que el tiempo de cálculo del conjunto de tareas se ve reducido considerablemente. Finalmente, es necesario un post-proceso para consolidar los datos antes de ofrecer el resultado a los usuarios.

En resumen, podemos decir que la computación distribuida añade un par de tareas al cálculo propiamente dicho (descomposición de la tarea principal y asignación de tareas a los nodos por una parte, y consolidación de los resultados por otra). Sin embargo, el hecho de disponer de una red de nodos trabajando en paralelo permite acelerar el tiempo de proceso total de la tarea hasta el punto que, a pesar de tener que realizar un trabajo adicional, la computación distribuida es más eficiente en procesos de cálculos repetitivos y con muchos datos.

Divide y vencerás

La frase “Divide y vencerás” ha sido pronunciada o atribuida a lo largo de los siglos por grandes figuras que han influido en la historia de la humanidad. Desde Filipo II de Macedonia hasta Napoleón Bonaparte, pasando por Julio César y Nicolas Maquiavelo, todos han reconocido la importancia de este mensaje.

Esta máxima sostiene que, ante un problema de gran tamaño con una solución complicada, conviene dividir el problema inicial en subproblemas de más fácil solución, para así poder resolver el problema inicial de una manera más sencilla y eficiente.

En el área de la computación, ocurre lo mismo. Como ejemplo, citaré un clásico: El algoritmo de ordenación Quicksort. Este algoritmo permite reducir el coste del algoritmo de ordenación de burbuja (uso de la fuerza bruta), siendo este θ(n²), hasta θ(n·log ⁡n ).

De manera similar, en procesos de cálculo repetitivos con grandes volúmenes de datos, como los que nos encontramos en escenarios con Big Data, el uso de los distintos nodos del cluster para paralelizar las tareas, supone un gran aumento en la eficiencia.

Conclusión

La distribución de la carga de trabajo entre los distintos nodos de un cluster en una solución Big Data, permite realizar las tareas en paralelo, consiguiendo grandes mejoras en la eficiencia de los procesos.

La computación distribuida es más eficiente en escenarios con unos cálculos a realizar sobre un gran conjunto de datos. De esta manera se paraleliza el trabajo y se reduce el tiempo total de cálculo.

A la hora de diseñar la arquitectura de un sistema Big Data, es conveniente tener en cuenta el grado de paralelización de las tareas, que será función del número de procesadores y cores disponibles en el sistema. Si el grado de paralelización es bajo, el rendimiento en según qué tareas, puede acabar siendo también muy bajo.