Arquitectura de Spark

arquitectura de apache spark

La arquitectura de Spark cuenta con un diseño modular que le permite adoptar diferentes configuraciones según la necesidad. Además de la flexibilidad que le aporta a Spark su diseño de programación, el modelo de computación maestro-esclavo le aporta escalabilidad y tolerancia a fallos, convirtiéndole en un todoterreno del Big Data.

Apache Spark es una de las herramientas más utilizadas en Big Data. En este artículo vamos a abordar la arquitectura de Spark tanto a nivel de software, como a nivel de hardware. Cada uno de estos enfoques le aporta a la herramienta características diferentes, que unidas definen el potencial de la herramienta.

Primero hablaremos de la parte software y su modelo de programación, que nos va a permitir entender la lógica del sistema. Y después hablaremos sobre su parte más física, su modelo de computación.

Arquitectura de Spark: el motor del Big Data

El motor de Spark lo conforman un conjunto de piezas, que unidas, le aportan las propiedades básicas. Estas piezas básicas que definen su funcionamiento, las podemos organizar en capas que se sustentan unas sobre otras, como si fuese una tarta.

Aunque la estructura de Spark es rígida y siempre debemos tener estas piezas básicas como pilares,  su diseño modular nos permite trabajar con ellas de manera independiente, lo que nos va a dar una gran flexibilidad a la hora de desarrollar nuestros proyectos.

Administrador de tareas

Administrador de recursos del clúster

Sistema de almacenamiento distribuido

¡Sin una de estas piezas ningún programa de Spark puede funcionar! A continuación, vamos a explicar cada uno de los pilares sobre los que se cimienta esta tecnología.

Sistema de almacenamiento distribuido

Spark no cuenta con una capa de almacenamiento, por lo que necesitamos un sistema de almacenamiento sobre el que apoyar la plataforma, además este deberá ser distribuido. Tendremos que usar algún sistema de almacenamiento externo para la gestión de los datos, como pueden ser el sistema de archivos distribuido HDFS, o los sistemas de bases de datos distribuidas HBase, MongoDB o Cassandra.

Esto nos aporta flexibilidad a la hora de procesar los datos, ya que al poder usar diferentes orígenes de datos, podremos elegir el que mejor se adapte a nuestro proceso.

Administrador de recursos del clúster

Sobre la capa de almacenamiento, se encuentra la capa de procesamiento. El administrador de recursos es la pieza dentro del motor de Spark que aporta a la plataforma la capacidad de gestionar los recursos disponibles en el clúster de manera autónoma.

Por defecto Spark cuenta con Spark Standalone Scheduler, un gestor de nodos muy básico. Así que generalmente nos apoyaremos sobre un administrador más potente como Mesos o YARN.

Administrador de tareas

Finalmente, sobre el sistema de almacenamiento que nos permite leer y escribir la información, y sobre el administrador de recursos que nos permite gestionar el procesamiento distribuido de los datos; situamos la pieza que gestiona las tareas a ejecutar.

Esta pieza es la base en la que se apoyarán el resto de módulos, es el núcleo del framework. Conocida como Spark Core, realmente es la pieza sobre la que trabajan todas las aplicaciones y es la que conocemos como Spark.

Extensiones: aumentando las funcionalidades de Spark

Estas capas de almacenamientos, procesamiento y planificación, sirven como base en la que desplegar diferentes complementos que aportan nuevas funcionalidades al sistema. Los propios desarrolladores de Spark han trabajado en varias librerías que extienden el alcance de esta herramienta, aunque también otros equipos trabajan desarrollando complementos sobre Spark.

Los módulos que podemos encontrar dentro del proyecto de Spark son:

  • Spark SQL: esta librería está diseñada para el tratamiento y consulta de datos estructurados y semi-estructurados. Con este módulo vamos a poder crear, transformar y realizar operaciones sobre estas estructuras de datos.
  • Spark ML y MLlib: estas librerías nos permiten realizar aprendizaje automático (machine learning) de manera escalable.
  • Spark Streaming: esta librería nos permite construir aplicaciones escalables y tolerantes a fallos para el tratamiento de datos en tiempo real (micro-batching). Con este módulo podemos recibir datos de una fuente en tiempo real, transformarlos y dejarlos en un destino.
  • Spark GraphX: esta librería nos permite el cómputo de grafos sobre Spark. Este módulo está disponible para menos lenguajes de programación que los anteriores, únicamente para Scala y Java.

Estas librerías comunes aumentan la productividad de los usuarios y pueden combinarse para crear flujos de trabajo complejos, creando así un motor unificado de procesamiento de datos a gran escala.

Spark SQL

Spark ML

Spark Streaming

Spark GraphX

Spark

Arquitectura maestro-esclavo

Acabamos de ver cómo se organiza el modelo de programación de Spark, pero ¿qué pasa con su modelo de computación? Spark es un framework de computación distribuida, lo que significa que vamos a tener varias máquinas interconectadas operando como una sola. Estas máquinas para organizarse necesitan una red por la que enviarse mensajes y establecer relaciones bien definidas entre ellas para realizar el trabajo. En este caso, tenemos un modelo maestro-esclavo en el que contamos con una organización jerárquica en la que una máquina, que denominaremos maestro, coordina el trabajo de otras, que llamaremos esclavos o trabajadores.

Escalabilidad

El modelo maestro-esclavo permite quitar o añadir máquinas a la red en cualquier momento sin tener que reiniciar el sistema. Esto permite que Spark pueda escalar aumentando o disminuyendo los recursos durante la ejecución de un proceso, según sea necesario.

Tolerancia a Fallos

Además, si uno de los nodos trabajadores de la red falla, su trabajo es asignado al resto de nodos trabajadores mientras el nodo afectado se recupera.

Disponibilidad

Sin embargo, el modelo de arquitectura maestro-esclavo tiene un punto débil en el nodo máster. Y es que este es crítico, si este nodo falla se pierde el punto de contacto de todas las conexiones del sistema y la ejecución del proceso fracasa. Para solucionar esto, existen otras herramientas como Apache Zookeeper que se encarga de reemplazar el nodo maestro por otro en caso de fallo para que el proceso pueda continuar hasta su finalización.

Como hemos visto, cuando hablamos de la arquitectura de Spark podemos hablar sobre la arquitectura software y su diseño modular, o sobre su arquitectura computacional basada en un modelo distribuido. Su diseño modular le aporta flexibilidad y le permite incorporar nuevas funcionalidades que le hacen más completo aún. Mientras que la arquitectura distribuida, le brinda la escalabilidad y la tolerancia a fallos por las que destaca entre los proyectos de Big Data.

Qué es Apache Spark

introducción a apache spark

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.​

Comparativa en tiempos de ejecución de una regresión logística para el mismo conjunto de datos

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.