Apache Spark


Apache Spark es un motor de análisis unificado de código abierto para el procesamiento de datos a gran escala. Spark proporciona una interfaz para programar clústeres con paralelismo de datos implícito y tolerancia a fallas . Originalmente desarrollado en la Universidad de California, Berkeley 's AMPLab , la Chispa base de código más tarde fue donada a la Apache Software Foundation , que ha mantenido desde entonces.

Apache Spark tiene su base arquitectónica en el conjunto de datos distribuidos resilientes (RDD), un conjunto múltiple de elementos de datos de solo lectura distribuidos en un grupo de máquinas, que se mantiene de manera tolerante a fallas . [2] La API de marco de datos se lanzó como una abstracción sobre el RDD, seguida de la API de conjunto de datos. En Spark 1.x, el RDD era la interfaz de programación de aplicaciones (API) principal, pero a partir de Spark 2.x se recomienda el uso de la API de Dataset [3] , aunque la API de RDD no está obsoleta . [4] [5] La tecnología RDD todavía es la base de la API de conjunto de datos. [6] [7]

Spark y sus RDD se desarrollaron en 2012 en respuesta a las limitaciones del paradigma de computación en clúster MapReduce , que fuerza una estructura de flujo de datos lineal particular en programas distribuidos: los programas MapReduce leen datos de entrada del disco, asignan una función a través de los datos, reducen los resultados de la mapear y almacenar los resultados de la reducción en el disco. Los RDD de Spark funcionan como un conjunto de trabajo para programas distribuidos que ofrece una forma (deliberadamente) restringida de memoria compartida distribuida . [8]

Dentro de Apache Spark, el flujo de trabajo se gestiona como un gráfico acíclico dirigido (DAG). Los nodos representan RDD, mientras que los bordes representan las operaciones en los RDD.

Spark facilita la implementación de ambos algoritmos iterativos , que visitan su conjunto de datos varias veces en un ciclo, y el análisis de datos interactivo / exploratorio, es decir, la consulta de datos repetida al estilo de una base de datos. La latencia de tales aplicaciones puede reducirse en varios órdenes de magnitud en comparación con la implementación de Apache Hadoop MapReduce. [2] [9] Entre la clase de algoritmos iterativos se encuentran los algoritmos de entrenamiento para sistemas de aprendizaje automático , que formaron el ímpetu inicial para desarrollar Apache Spark. [10]

Apache Spark requiere un administrador de clústeres y un sistema de almacenamiento distribuido . Para la administración de clústeres, Spark admite el modo independiente (clúster de Spark nativo, donde puede iniciar un clúster de forma manual o utilizar los scripts de lanzamiento proporcionados por el paquete de instalación. También es posible ejecutar estos demonios en una sola máquina para realizar pruebas), Hadoop YARN , Apache Mesos o Kubernetes . [11] Para almacenamiento distribuido, Spark puede interactuar con una amplia variedad, incluyendo Alluxio , Hadoop Distributed File System (HDFS) , [12] MapR File System (MapR-FS) , [13] Cassandra , [14] Se puede implementar OpenStack Swift , Amazon S3 , Kudu , Lustre , [15] o una solución personalizada. Spark también admite un modo local pseudodistribuido, que generalmente se usa solo con fines de desarrollo o prueba, donde no se requiere almacenamiento distribuido y en su lugar se puede usar el sistema de archivos local; en tal escenario, Spark se ejecuta en una sola máquina con un ejecutor por núcleo de CPU .