Spark es una plataforma open source (licencia Apache 2.0) para procesamiento paralelo en clusters.

Está orientada a manejar grandes volúmenes de datos y ejecutar cómputo intensivo sobre ellos. Spark está suponiendo una revolución en el mundo del Big Data, podemos verlo como una evolución de Hadoop MapReduce, que nos ofrece varias ventajas y reduce significativamente los tiempos de ejecución.

El nacimiento de Spark surge en los laboratorios AMPLab de la Universidad de Berkeley en 2009, su evolución ha sido espectacular, incrementándose notablemente la comunidad y el número de contribuciones.

Finalmente en 2014 Spark fue acogido como un proyecto “Top-Level” de la Apache Software Foundation y nació la compañía Databricks para dar soporte al desarrollo de Spark.

Algunas de las ventajas más notables de Spark son:

3

Componentes

Spark se basa en un componente principal o core y sobre él existen ciertos componentes que extienden su uso. Los más reseñables serían los siguientes:

Todos estos paquetes están incluidos junto con el core en la distribución Spark.

4

La abstracción RDD

Un Resilient Distributed Dataset (RDD) es una abstracción de Spark que representa una colección inmutable de elementos en memoria distribuida a través del cluster en particiones. Sobre un RDD se pueden ejecutar operaciones en paralelo.

Cada partición distribuida representa un subconjunto de los datos y está asignada a cada nodo de manera que este podrá operar de forma paralela con estos datos.

Shell interactiva

Spark nos ofrece una shell interactiva en Scala y Python con la que podemos experimentar y testear, probando todo el API que el framework nos ofrece.

5

Esto nos proporciona una muy buena herramienta para introducirnos en la plataforma y hacer pruebas rápidas.

Ejemplo word count

A continuación vamos a ver cómo sería un ejemplo de una implementación para solucionar el problema de contar el número de palabras de un fichero usando Spark y, en este caso, en lenguaje Python.

El problema del conteo de palabras es un problema clásico, que se suele usar como ejemplo de típico problema paralelizable. Es sencillo de entender, pero nos da una idea de cómo de bien puede escalar la solución. Es una buena aproximación inicial antes de enfrentarnos a problemas más complejos.

# Read text file
f = sc.textFile("/var/log/README")
# Define map and reduce transformations
wc = f.flatMap(lambda x: x.split(' ')).map(lambda x: (x, 1)).reduceByKey(lambda x,y: x+y)
# Trigger action to execute transformations and collect results
wc.collect()

En este caso sólo nos lleva tres líneas: la primera en la que leemos el fichero, en la segunda definimos las transformaciones map/reduce haciendo uso de funciones lambda y en la última disparamos la ejecución y mostramos los resultados por pantalla.

Spark se encargará de construir el grafo de ejecución, cargar los datos en memoria de forma distribuida a través de un RDD, ejecutar las transformaciones en los nodos que tenga nuestro cluster y, por último, recopilar y agregar los resultados.

Conclusión

Spark ha sido diseñado desde el principio para solucionar muchos problemas que se nos presentaban con Hadoop, es rápido y eficaz. Su adopción es cada vez mayor y el número de contribuidores se ha incrementado notablemente. Podemos decir que la plataforma ha alcanzado un punto de madurez.

Ya existen un buen número de proyectos reales donde se ha aplicado con éxito y se ha puesto de manifiesto la ventaja competitiva que ofrece. Realmente Spark se ha convertido en el última gran “destello” en el universo Big Data.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete