Spark es un framework de computación distribuida diseñado para el procesamiento de grandes volúmenes de datos que permite dividir y paralelizar el trabajo. En esta introducción a Apache Spark vamos a explicar qué es, para qué sirve, cuándo debes usarlo y por qué debes usarlo.
Apache Spark es una herramienta software diseñada para tratar problemas computacionales de forma distribuida. Pero antes de explicar para qué sirve Spark, vamos a asegurarnos de que sabemos lo que es un framework o la computación distribuida.
Un framework es un concepto abstracto que se define como un conjunto estandarizado de definiciones, prácticas, criterios y herramientas creado para abordar una problemática concreta. Se materializa en un software que ofrece un entorno de trabajo que sirve de referencia para los usuarios, lo que simplifica las tareas a la hora de resolver un problema.
Generalmente, cuando trabajamos desde nuestro ordenador las tareas las realiza la propia máquina. En cambio, la computación distribuida nos permite asociar diferentes máquinas para que colaboren y se distribuyan las tareas entre ellas. Las tareas se dividen en subtareas más ligeras que son asignadas a las diferentes máquinas, reduciendo así la carga de trabajo de cada una de ellas y aumentando la capacidad total del grupo.
Spark permite el tratamiento, la consulta, el machine learning y el streaming sobre cantidades de datos, cantidades que antes de la aparición del Big Data eran impensables. Spark se caracteriza por su velocidad, facilidad de uso y generalidad. Además, su modelo de arquitectura le proporciona escalabilidad horizontal y tolerancia a fallos, por lo que Spark se ha convertido en una pieza clave para el Big Data.
¿Por qué usar Spark?
Spark es una herramienta que se ha ganado una gran reputación en el mundo del Big Data, tanto entre las empresas como entre los desarrolladores e investigadores. Esto es debido principalmente a su gran rendimiento y a que se trata de una herramienta de código abierto (licencia Apache), lo que se traduce en soporte por parte de la comunidad. Es realmente sencillo encontrar documentación y ayuda sobre la herramienta en la web, lo que democratiza aún más su uso.
Origen de Spark
Apache Spark es la evolución de Apache Hadoop, una de las primeras herramientas Big Data. Spark fue desarrollado para evitar las limitaciones que planteaba el paradigma MapReduce en Hadoop.
Los procesos de Hadoop son muy lentos, el resultado de cada paso del proceso se escribe en disco para que el siguiente paso lo lea. Ante este hándicap, se plantea una solución más ágil. Spark almacena los datos en memoria en lugar de en disco como Hadoop, lo que hace que las ejecuciones sean más rápidas. Esta solución, junto con otras optimizaciones, permite a Spark procesar datos hasta 100 veces más rápido si lo comparamos con Hadoop.
La lectura y escritura en disco son de los procesos más lentos para un ordenador.
En ocasiones, cuando el volumen de los datos es demasiado grande como para almacenarlo en memoria, es necesario que Spark almacene los datos en disco. En estas situaciones, Spark tambíen es rápido cuando almacena datos a gran escala en disco. Esto hace que tengamos que encontrar el equilibrio entre lo que se almacena en memoria y lo que se almacena en disco, para tener una buena velocidad y para que el coste no sea demasiado elevado, ya que la memoria siempre es bastante más cara que el disco.
Aunque en los últimos años a Spark le han salido un gran número de competidores, sigue siendo el buque insignia del procesamiento en Big Data. En ciertos problemas concretos, como el procesamiento en tiempo real, Spark sale perdiendo ya que trabaja por lotes, y existen alternativas más adecuadas como Apache Flink que realmente opera en tiempo real. Pero la generalidad de Spark, su capacidad a adaptarse a casi cualquier tipo de terreno y su evolución constante por parte de la comunidad, le mantienen entre las soluciones más usadas.