Apache Spark tiene su base arquitectónica en el resilient distributed dataset (RDD), un multiset de solo lectura de elementos de datos distribuidos en un clúster de máquinas, que se mantiene de forma tolerante a fallos. La API de Dataframe se lanzó como una abstracción sobre el RDD, seguida de la API de Dataset. 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 conjunto de datos aunque la API RDD no esté obsoleta. La tecnología RDD sigue siendo la base de la API del conjunto de datos.,
Spark y sus RDDs se desarrollaron en 2012 en respuesta a las limitaciones en el paradigma de computación en clúster MapReduce, que obliga a una estructura de flujo de datos lineal particular en programas distribuidos: los programas MapReduce leen datos de entrada desde el disco, asignan una función a través de los datos, reducen los resultados del mapa y almacenan los resultados de reducción en el disco. Los RDDs de Spark funcionan como un conjunto de trabajo para programas distribuidos que ofrece una forma (deliberadamente) restringida de memoria compartida distribuida.,
Spark facilita la implementación de Algoritmos iterativos, que visitan su conjunto de datos varias veces en un bucle, y el análisis de datos interactivo/exploratorio, es decir, la consulta repetida de datos al estilo de la 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.Entre la clase de Algoritmos iterativos se encuentran los Algoritmos de entrenamiento para sistemas de aprendizaje automático, que formaron el impulso inicial para el desarrollo de Apache Spark.
Apache Spark requiere un administrador de clúster y un sistema de almacenamiento distribuido., Para la administración de clústeres, Spark es compatible con el clúster autónomo (clúster nativo de Spark), donde puede iniciar un clúster manualmente o usar los scripts de inicio proporcionados por el paquete de instalación. También es posible ejecutar estos demonios en una sola máquina para probar), Hadoop YARN, Apache Mesos o Kubernetes. Para el almacenamiento distribuido, Spark puede interactuar con una amplia variedad, incluidos Alluxio, Hadoop Distributed File System (HDFS), MapR File System (MapR-FS), Cassandra, OpenStack Swift, Amazon S3, Kudu, lustre file system o se puede implementar una solución personalizada., Spark también admite un modo local pseudo-distribuido, generalmente utilizado solo para fines de desarrollo o prueba, donde no se requiere almacenamiento distribuido y el sistema de archivos local se puede usar en su lugar; en tal escenario, Spark se ejecuta en una sola máquina con un Ejecutor por núcleo de CPU.
Spark Coreeditar
Spark Core es la base del proyecto general. Proporciona funciones de envío de tareas distribuidas, programación y E/S básicas, expuestas a través de una interfaz de programación de aplicaciones (para Java, Python, Scala, .,NET y R) centrado en la abstracción RDD (la API de Java está disponible para otros lenguajes JVM, pero también es utilizable para otros lenguajes no JVM que pueden conectarse a la JVM, como Julia). Esta interfaz refleja un modelo de programación funcional/de orden superior: un programa» driver » invoca operaciones paralelas como map, filter o reduce en un RDD pasando una función a Spark, que luego programa la ejecución de la función en paralelo en el clúster. Estas operaciones, y otras adicionales como joins, toman RDDs como entrada y producen nuevos RDDs., Los RDD son inmutables y sus operaciones son perezosas; la tolerancia a fallos se logra haciendo un seguimiento del «linaje» de cada RDD (la secuencia de operaciones que lo produjo) para que pueda reconstruirse en caso de pérdida de datos. Los RDDs pueden contener cualquier tipo de objetos Python,. NET, Java o Scala.
además del estilo funcional de programación orientado a RDD, Spark proporciona dos formas restringidas de variables compartidas: las variables de difusión hacen referencia a datos de solo lectura que deben estar disponibles en todos los nodos, mientras que los acumuladores se pueden usar para programar reducciones en un estilo imperativo.,
un ejemplo típico de programación funcional centrada en RDD es el siguiente programa Scala que calcula las frecuencias de todas las palabras que ocurren en un conjunto de archivos de texto e imprime las más comunes. Cada map, flatMap (una variante de map) y reduceByKey toma una función anónima que realiza una operación simple en un solo elemento de datos (o un par de elementos), y aplica su argumento para transformar un RDD en un nuevo RDD.,
Spark SQLEDIT
Spark SQL es un componente en la parte superior de Spark Core que introdujo una abstracción de datos llamada DataFrames, que proporciona soporte para datos estructurados y semiestructurados. Spark SQL proporciona un lenguaje específico de dominio (DSL)para manipular DataFrames en Scala, Java, Python o. NET. también proporciona soporte de lenguaje SQL, con interfaces de línea de comandos y servidor ODBC / JDBC. Aunque los DataFrames carecen de la comprobación de tipos en tiempo de compilación que ofrecen los RDDs, a partir de Spark 2.0, el conjunto de datos fuertemente tipado también es totalmente compatible con Spark SQL.,
Spark StreamingEdit
Spark Streaming utiliza la capacidad de programación rápida de Spark Core para realizar análisis de streaming. Ingiere datos en mini-lotes y realiza transformaciones RDD en esos mini-lotes de datos. Este diseño permite utilizar el mismo conjunto de código de aplicación escrito para análisis por lotes en análisis de streaming, lo que facilita la implementación de la arquitectura lambda. Sin embargo, esta conveniencia viene con la penalización de latencia igual a la duración del mini-lote., Otros motores de transmisión de datos que procesan evento por evento en lugar de en mini-lotes incluyen Storm y el componente de transmisión de Flink. Spark Streaming tiene soporte incorporado para consumir desde Kafka, Flume, Twitter, ZeroMQ, Kinesis y sockets TCP/IP.
en Spark 2.x, una tecnología separada basada en Conjuntos de datos, llamada transmisión estructurada, que tiene una interfaz de nivel superior también se proporciona para admitir la transmisión.
Spark se puede implementar en un centro de datos local tradicional, así como en la nube.,
MLlib Machine Learning LibraryEdit
Spark MLlib es un framework de aprendizaje automático distribuido en la parte superior de Spark Core que, debido en gran parte a la arquitectura Spark basada en memoria distribuida, es hasta nueve veces más rápido que la implementación basada en disco utilizada por Apache Mahout (de acuerdo con los puntos de referencia realizados por los desarrolladores de MLlib contra las implementaciones de mínimos cuadrados alternos (als), y antes de que Mahout obtuviera una interfaz Spark), y escala mejor que Vowpal Wabbit.,, Árbol potenciado por gradiente
graphxedit
GraphX es un framework de procesamiento de gráficos distribuido sobre Apache Spark., Debido a que se basa en RDDs, que son inmutables, los gráficos son inmutables y, por lo tanto, GraphX no es adecuado para gráficos que necesitan ser actualizados, y mucho menos de una manera transaccional como una base de datos de gráficos. GraphX proporciona dos API separadas para la implementación de algoritmos paralelos masivos( como PageRank): una abstracción de Pregel y una API de estilo MapReduce más general. A diferencia de su predecesor Bagel, que fue formalmente obsoleto en Spark 1.6, GraphX tiene soporte completo para gráficos de propiedades (gráficos donde las propiedades se pueden unir a bordes y vértices).,
GraphX se puede ver como la versión en memoria de Spark de Apache Giraph, que utilizó MapReduce basado en disco de Hadoop.
Al igual que Apache Spark, GraphX inicialmente comenzó como un proyecto de investigación en AMPLab y Databricks de UC Berkeley, y más tarde fue donado a la Apache Software Foundation y al proyecto Spark.
Leave a Reply