¿Qué es Apache Spark?

Apache Spark es un sistema de computación que se basa en Hadoop Map Reduce y que, principalmente, permite dividir o paralelizar el trabajo, ya que normalmente se instala en un clúster de máquina. La idea es que tengamos n máquinas, por ejemplo diez máquinas, y cada una de esas instancias va a tener instalada una versión de Apache Spark.

De esta manera, cuando tengamos que procesar una gran cantidad de datos, por ejemplo un fichero muy grande, podemos dividir el mismo en diez partes, y cada máquina se encargará de una décima parte del fichero, y al final lo uniremos. Con esto estamos ganando velocidad, y la velocidad es clave en el mundo del Big Data.

Un poco de historia

Apache Spark nació en 2009 en la Universidad de Berkeley, y actualmente se encuentra en la versión 2.3.0.

Aquí podemos ver su timeline:

Imagen 0 en Qué es Apache Spark
  • Nació prácticamente de un paper de Google y a partir de ahí fue evolucionando, pasando por los procesos mapreduce.
  • En 2008, aproximadamente, apareció Hive y HBase, que son dos herramientas del ecosistema de Hadoop.
  • A partir de 2009-2010 comenzó la primera versión alfa de Apache Spark.
  • Apache Spark se sitúa dentro del ecosistema de Apache Haddop, por lo cual se considera como “hija” del mismo.

Características principales

Sus principales características son las siguientes:

  • Está integrado con Apache Hadoop.
  • Trabaja en memoria, con lo que se consigue mucha mayor velocidad de procesamiento.
  • También permite trabajar en disco. De esta manera si por ejemplo tenemos un fichero muy grande o una cantidad de información que no cabe en memoria, la herramienta permite almacenar parte en disco, lo que hace perder velocidad. Esto hace que tengamos que intentar 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.
  • Nos proporciona API para Java, Scala, Python y R.
  • Permite el procesamiento en tiempo real, con un módulo llamado Spark Streaming, que combinado con Spark SQL nos va a permitir el procesamiento en tiempo real de los datos. Conforme vayamos inyectando los datos podemos ir transformándolos y volcándolos a un resultado final.
  • Resilient Distributed Dataset (RDD): Usa la evaluación perezosa, lo que significa es que todas las transformaciones que vamos realizando sobre los RDD, no se resuelven, si no que se van almacenando en un grafo acíclico dirigido (DAG), y cuando ejecutamos una acción, es decir, cuando la herramienta no tenga más opción que ejecutar todas las transformaciones, será cuando se ejecuten. Esto es un arma de doble filo, ya que tiene una ventaja y un inconveniente. La ventaja es que se gana velocidad al no ir realizando las transformaciones continuamente, sino solo cuando es necesario. El inconveniente es que si alguna transformación eleva algún tipo de excepción, la misma no se va a detectar hasta que no se ejecute la acción, por lo que es más difícil de debuggear o programar.

Componentes

Los componentes principales que conforman el framework son estos:

  • Spark Core: Es la base o conjunto de librerías donde se apoya el resto de módulos. Es el núcleo del framework.
  • Spark SQL: Es el módulo para el procesamiento de datos estructurados y semi-estructurados. Con este módulo vamos a poder transformar y realizar operaciones sobre los RDD o los dataframes. Está pensado exclusivamente para el tratamiento de los datos.
  • Spark Streaming: Es el que permite la ingesta de datos en tiempo real. Si tenemos una fuente, por ejemplo Kafka o Twitter, con este módulo podemos ingestar los datos de esa fuente y volcarlos a un destino. Entre la ingesta de datos y su volcado posterior, podemos tener una serie de transformaciones.
  • Spark MLLib: Es una librería muy completa que contiene numerosos algoritmos de Machine Learning, tanto de clusterización, clasificación, regresión, etc. Nos permite, de una forma amigable, poder utilizar algoritmos de Machine Learning.
  • Spark Graph: Permite el procesamiento de grafos (DAG). No permite pintar grafos, sino que permite crear operaciones con grafos, con sus nodos y aristas, e ir realizando operaciones.

Tipos de instalación de Apache Spark

Existen varios modos de instalar Apache Spark:

  • Modo Standalone: Tenemos el HDFS (Hadoop Distributed File System), es decir, el sistema de archivos distribuido de Haddop, y por encima estaría Apache Spark.
  • Hadoop V1 (SIMR):  Tenemos el HDFS y por encima Map Reduce, y por encima del mismo estaría Apache Spark. 
  • Hadoop V2 (YARN): Tenemos nuestro HDFS y por encima un gestor de recursos, como puede ser YARN o Mesos, y por encima del mismo estaría Apache Spark. Ese gestor de recursos se va a encargar de gestionar todos los recursos de nuestro clúster.

Cómo realizar la instalación de Apache Spark

Modo Standalone

Es la manera más simple de instalar Apache Spark, porque únicamente requiere descargar una instancia o una versión compilada del mismo y añadirla a cada uno de los nodos del clúster

Imagen 1 en Qué es Apache Spark

Spark sobre Mesos

Mesos es un gestor de recursos que se va a encargar del reparto de tareas. En esta instalación tendríamos nuestro driver o main, que va a levantar nuestro SparkContext, y el clúster manager o Mesos, que se va a encargar de repartir las tareas en los distintos Worker Node, que son las distintas máquinas de nuestro clúster.

Imagen 2 en Qué es Apache Spark

Spark sobre YARN

Al igual que el anterior modo, tendríamos a YARN como gestor de recursos, que también se encuentra dentro de Apache Hadoop y es el que se encarga de los procesos mapreduce y demás. Es la instalación más habitual.

Imagen 3 en Qué es Apache Spark