Profile Software Services

Big Data: análisis de datos masivos con Apache Hadoop y Spark

En este artículo hacemos una introducción al análisis de grandes volúmenes de datos utilizando Apache Hadoop y Apache Spark, dos de las herramientas de Big Data más potentes en la actualidad. ¡Vamos allá!

Programación paralela

Debido a que estamos en una época de auge de la transformación digital, todo es susceptible de poder utilizarse como dato. Además, cada vez los sistemas tecnológicos tienen mayor capacidad. Esto hace que la cantidad de datos de los que se disponen sea masiva, lo que da lugar al Big Data, que se caracteriza por las denominadas 4 Vs:

Los algoritmos secuenciales en una misma máquina no son la mejor opción para analizar este volumen de información, debido a que serían demasiado ineficientes y costosos. Estos algoritmos se basan en la escalabilidad vertical, es decir, conseguir mejorar el rendimiento añadiendo más recursos a un mismo nodo.

La aproximación para poder escalar en ecosistemas de Big Data es utilizar algoritmos paralelos. Para que varias máquinas o nodos puedan realizar tareas más simples, pero de manera simultánea, para conseguir abordar todo el análisis como un todo. Estos algoritmos se basan en la escalabilidad horizontal, es decir, conseguir mejorar el rendimiento añadiendo más nodos.

Paradigma MapReduce

Con el fin de poder realizar algoritmos paralelos en sistemas con grandes cantidades de datos surgió el paradigma MapReduce. Este paradigma se basa en dos principales funciones:

Ejemplo de aplicación del paradigma MapReduce

Vamos a ver un ejemplo sencillo del paradigma MapReduce:

Estado inicial

A partir de 3 fuentes de datos que contienen el stock de aceites de un supermercado, se quiere obtener el stock de cada tipo de aceite:

Aceite de girasol, Marca A, 8.

Aceite de girasol, Marca B, 10.

Aceite de oliva, Marca A, 5 .

Aceite de girasol, Marca A, 1.

Aceite de girasol, Marca B, 0.

Aceite de oliva, Marca A, 96.

Aceite de girasol, Marca Z, 100.

Aceite de oliva, Marca A, 0.

Operación map

En este caso, tras aplicar la operación map, se obtendrían los siguientes pares clave-valor (la clave consiste en el tipo de aceite y el valor en el número de unidades):

Operación reduce

Y, tras aplicar la operación reduce, se realizaría la suma por clave de cada uno de los tipos:

Apache Hadoop

Apache Hadoop es la implementación de código abierto de MapReduce.

¿Cómo aplica MapReduce Apache Hadoop?

Apache Hadoop lleva a cabo MapReduce de la siguiente manera:

Desventajas de Apache Hadoop

Aunque era el estado del arte hace algunos años, se han encontrado algunos inconvenientes: como la necesidad de adaptar todas las soluciones a la división entre tareas map y reduce, que no siempre es sencillo, y al utilizar lecturas y escrituras en disco hace que no sea demasiado rápido.

Ejemplo de funcionamiento de Hadoop

Ejemplo de funcionamiento de Apache Hadoop
Diagrama de flujo en Apache Hadoop para calcular el stock de aceites de un supermercado.

Apache Spark

Apache Spark es un sistema para procesar datos distribuidos de una manera escalable horizontal y no requiriendo tanta complejidad conceptual como con el ecosistema MapReduce. Surgió para solventar los problemas que se vieron en Apache Hadoop, pero no siempre es lo óptimo para todos los casos de uso.

RDD en Spark

La pieza fundamental en la que Spark se basa para realizar la paralización se denomina RDD o Resilient Distributed Dataset. Se trata de una colección de objetos que es inmutable (es decir, de solo lectura una vez creada), distribuida, puede almacenarse en la caché y contiene una lista de referencias a particiones de los datos en el sistema.

¿Cómo hace particiones Spark?

Es Spark el encargado de realizar estas particiones y lo hace de la siguiente manera:

¿Cómo se pueden cargar los RDD en Apache Spark?

Operaciones para los RDD

Hay dos tipos de operaciones que se pueden aplicar a los RDD: transformaciones o acciones.

Las operaciones pueden ser de dos tipos, según si necesitan estar en la misma partición o no:

¿Cómo realiza las operaciones Spark?

A través de un grafo DAG (Directed Acyclic Graph o grafo dirigido acíclico), se determina el orden de las operaciones que se hayan definido. Esto es debido a que no siempre se van a ejecutar en el orden en el que se han definido, sino en el óptimo para Spark.

Primero se van a realizar las operaciones narrow (las que se pueden hacer en una misma partición) y después se harán las operaciones wide, manteniendo el orden determinado por Spark tras el análisis del grafo DAG.

Ejemplo de operaciones de Spark

# Cargamos sesión Spark
sc = SparkContext('local')
spark = SparkSession(sc)

# Leemos el fichero (file1.csv)
oilDf = spark.read.csv("file1.csv", header='true', inferSchema = 'true')

# Sumamos la cantidad por producto
oilDf.groupBy("Producto").sum("Cantidad").collect()

Conclusión

En este artículo nos hemos aproximado al análisis de datos masivos a través de Apache Hadoop y Apache Spark, dos tecnologías fundamentales en Big Data en la actualidad. Concretamente, hemos revisado los conceptos de programación paralela y paradigma MapReduce y hemos diseccionado el funcionamiento de Hadoop y Spark a través de un ejemplo en el que hemos calculado el stock de aceites en un supermercado.

Descubre más sobre cómo trabajar con grandes volúmenes de datos en nuestro canal de YouTube. ¡Suscríbete!

Salir de la versión móvil