# Apache Spark

Apache Spark es un framework de computación (entorno de trabajo) en clúster open-source. Fue desarrollada originariamente en la Universidad de California, en el AMPLab de Berkeley. El código base del proyecto Spark fue donado más tarde a la Apache Software Foundation que se encarga de su mantenimiento desde entonces. Spark proporciona una interfaz para la programación de clusters completos con Paralelismo de Datos implícito y tolerancia a fallos.
Apache Spark se puede considerar un sistema de computación en clúster de propósito general y orientado a la velocidad. Proporciona APIs en Java, Scala, Python y R. También proporciona un motor optimizado que soporta la ejecución de gráficos en general. También soporta un conjunto extenso y rico de herramientas de alto nivel entre las que se incluyen Spark SQL (para el procesamiento de datos estructurados basada en SQL), MLlib para implementar machine learning, GraphX para el procesamiento de graficos y Spark Streaming.

## Historia

Spark fue desarrollado en sus inicios por Matei Zaharia en el AMPLab de la UC Berkeley en 2009. Fue liberado como código abierto en 2010 bajo licencia BSD.
En 2013, el proyecto fue donado a la Apache Software Foundation y se modificó su licencia a Apache 2.0. En febrero de 2014, Spark se convirtió en un Top-Level Apache Project.
En noviembre de 2014, la empresa de su fundador, M. Zaharia, Databricks obtuvo un nuevo récord mundial en la ordenación a gran escala usando Spark.
Hacia 2015, Spark tenía más de 1000 contribuidores convirtiéndose en uno de los proyectos más activos de la Apache Software Foundation y en uno de los proyectos de big data open source más activos.
Dada la popularidad de la plataforma hacia el 2014, programas de pago como la General Assembly and free fellowships like The Data Incubator comenzaron a ofrecer cursos de formación personalizados
| Versión | Fecha de la distribución original | Última versión | Fecha de la distribución |
| Versión antigua, sin servicio técnico: 0.5 | 12-06-2012 | 0.5.1 | 07-10-2012 |
| Versión antigua, sin servicio técnico: 0.6 | 14-10-2012 | 0.6.2 | 07-02-2013 |
| Versión antigua, sin servicio técnico: 0.7 | 27-02-2013 | 0.7.3 | 16-07-2013 |
| Versión antigua, sin servicio técnico: 0.8 | 25-09-2013 | 0.8.1 | 19-12-2013 |
| Versión antigua, sin servicio técnico: 0.9 | 02-02-2014 | 0.9.2 | 23-07-2014 |
| Versión antigua, sin servicio técnico: 1.0 | 30-05-2014 | 1.0.2 | 05-08-2014 |
| Versión antigua, sin servicio técnico: 1.1 | 11-09-2014 | 1.1.1 | 26-11-2014 |
| Versión antigua, sin servicio técnico: 1.2 | 18-12-2014 | 1.2.2 | 17-04-2015 |
| Versión antigua, sin servicio técnico: 1.3 | 13-03-2015 | 1.3.1 | 17-04-2015 |
| Versión antigua, sin servicio técnico: 1.4 | 11-06-2015 | 1.4.1 | 15-07-2015 |
| Versión antigua, sin servicio técnico: 1.5 | 09-09-2015 | 1.5.2 | 09-11-2015 |
| Versión antigua, sin servicio técnico: 1.6 | 04-01-2016 | 1.6.3 | 07-11-2016 |
| Versión antigua, sin servicio técnico: 2.0 | 26-07-2016 | 2.0.2 | 14-11-2016 |
| Versión antigua, sin servicio técnico: 2.1 | 28-12-2016 | 2.1.3 | 26-06-2018 |
| Versión antigua, sin servicio técnico: 2.2 | 11-07-2017 | 2.2.3 | 11-01-2019 |
| Versión antigua, sin servicio técnico: 2.3 | 28-02-2018 | 2.3.4 | 09-09-2019 |
| Versión antigua, con servicio técnico: 2.4 | 02-11-2018 | 2.4.7 | 12-10-2020 |
| Versión estable actual: 3.0 | 18-06-2020 | 3.0.2 | 19-02-2020 |
| Versión estable actual: 3.1 | 02-03-2021 | 3.1.1 | 02-03-2021 |
| Leyenda:Versión antiguaVersión antigua, con soporte técnicoÚltima versiónÚltima versión previaLanzamiento futuro ||||

## Introducción

Apache Spark tiene la base de su arquitectura en el llamado RDD o Resilient Distributed DataSet que es un multiset de solo lectura de ítems de datos distribuidos a lo largo de un clúster de máquinas que se mantiene en un entorno tolerante de fallos.
En Spark 1.x, RDD era la API principal pero con el desarrollo de Spark 2.0, se recomienda la utilización de la API DataSet. aunque la API RDD no se considera descatalogada. la tecnología RDD todavía está presente en la base de la API DataSet.
Spark y sus RDDs fueron desarrollados en 2012 en respuesta a las limitaciones del paradigma de computación en clúster MapReduce que fuerza a la utilización de una estructura lineal dataflow en particular en los programas distribuidos: Los programas basados en MapReduce leen los datos de entrada desde disco, que mapea una función a lo largo de los datos, reduce los resultados del mapa y almacena los resultados de la reducción en disco.
Los RDDs de Spark funcionan como un working set para los programas distribuidos que ofrecen una forma (deliberadamente) restringida de la memoria compartida distribuida.
Spark facilita la implementación de tanto algoritmos iterativos que visitan su dataset muchas veces en un mismo bucle tanto como el análisis de datos interactivo/exploratorio (por ejemplo: a loop, and interactive/exploratory data analysis, por ejemplo: the repeated database-style querying of data).
La latencia de estas aplicaciones se puede reducir en varios órdenes de magnitud en comparación con la implementación basada en MapReduce (comúnmente utilizada por ejemplo en los stacks basados en Apache Hadoop.
Más allá de los algoritmos de tipo iterativos, están los algoritmos de entrenamiento para sistemas de machine learning , que constituyeron el impulso inicial del desarrollo de Apache Spark.
Apache Spark requiere de un manejador de clúster y un sistema de almacenamiento distribuido.
Para la gestión del clúster, Spark soporta las opciones siguientes:
* Spark Standalone (Cluster Spark Nativo)
* Hadoop YARN
* Apache Mesos.
Para el almacenamiento distribuido, Spark presenta interfaces hacia una gran variedad de plataformas:
* Hadoop Distributed File System (HDFS)
* MapR File System (MapR-FS)
* Cassandra
* OpenStack Swift
* Amazon S3
* Azure Databricks
* Kudu
* Incluso soporta una solución personalizada.
* Databricks
Spark también soporta un modo local pseudo-distribuido, normalmente utilizado solamente para pruebas o en entornos de desarrollo donde el almacenamiento distribuido no es obligatorio y se puede usar el sistema de archivos local; en un escenarion como este, Spark se ejecuta en una única máquina con un executor por cada core de CPU.