Apache Spark: Fundamentos Teóricos

spark_0

Apache Spark es un Framework de código abierto para sistemas distribuidos originalmente desarrollado en la Universidad de California en el AMPLab de Berkeley. La base de código de Spark fue posteriormente donada a la Apache Software Foundation, quienes han realizado las labores de desarrollo y mantenimiento desde entonces.

Spark provee a los desarrolladores con una API centrada en una estructura de datos llamada RDD (Resilient Distributed Dataset ó Conjunto de Datos Resiliente y Distribuido), el cual es un multiconjunto de datos distribuidos en un clúster de máquinas que es mantenido a través de una arquitectura tolerante a fallas.

Otro hecho importante a mencionar es que Apache Spark fue desarrollado en respuesta a las limitaciones del paradigma MapReduce, el cual forza a una estructura particular de flujo de datos lineal en programas distribuidos. Los programas en MapReduce obtienen la entrada de datos realizando operaciones de lectura en disco, mapean una función en el conjunto de datos, reducen los resultados del “mapping” y almacenan los resultados de la reducción en disco.

mapreduce

Las estructuras RDD funcionan como un conjunto de trabajo para programas distribuidos que ofrecen (deliberadamente) una forma restingida de memoria compartida y distribuida. La disponibilidad de RDDs facilita la implementación de algoritmos iterativos (que visitan el conjunto de datos múltiples veces en un ciclo) y análisis interactivos / exploratorios de datos, como por ejemplo el estilo repetitvo de búsquedas en bases de datos.

La latencia de dichas aplicaciones (en comparación con Apache Hadoop, una implementación muy popular de MapReduce) puede ser reducida en varios órdenes de magnitud. Entre la clase de algoritmos iterativos se encuentran los algoritmos de entrenamiento para sistemas de aprendizaje de máquinas (Machine Learning), uno de los tópicos fundamentales para el desarrollo de Apache Spark.

Apache Spark requiere de un Administrador de Clústeres y un Sistema de Almacenamiento Distribuido. Para la Administración de Clústeres, Spark soporta un clúster nativo Spark en modo standalone, Hadoop YARN ó Apache Mesos.

Para Almacenamiento Distribuido, Spark puede servir de interfaz con una amplia variedad que incluye:

– HDFS (Hadoop Distributed File System)
– MapR File System (MAPR-FS)
– Apache Cassandra
– OpenStack Swift
– Amazon S3
– Kudu
– Soluciones Personalizadas

Spark también provee soporte para un modo local pseudo-distribuido que usualmente es utilizado para desarrollo o Testing, donde el almacenamiento distribuido no es un requerimiento y el Sistema Local de Archivos puede ser usado sin problemas. En dicho escenario, Spark corre en un solo nodo o máquina con un ejecutor por cada CPU Core.