Apache Spark
Apache Spark es un motor de procesamiento de datos de código abierto ultrarrápido para aplicaciones de inteligencia artificial y machine learning, respaldado por la mayor comunidad de código abierto en torno a big data
imagen abstracta negra y azul
¿Qué es Apache Spark?

Apache Spark es un motor de procesamiento de datos de código abierto ultrarrápido para aplicaciones de inteligencia artificial y machine learning, respaldado por la mayor comunidad de código abierto en torno a big data.

Apache Spark (Spark) es un motor de procesamiento de datos de código abierto para grandes conjuntos de datos. Está diseñado para ofrecer la velocidad computacional, la escalabilidad y la programabilidad que exige big data, específicamente para datos en streaming, datos de grafos, machine learning y aplicaciones de inteligencia artificial (IA).

El motor de análisis de Spark procesa datos de 10 a 100 veces más rápido que las alternativas del mercado. Se escala distribuyendo el trabajo de procesamiento en grandes clústeres de sistemas, con paralelismo y tolerancia a errores. Además, incluye API para los lenguajes de programación más populares entre analistas de datos y científicos de datos, como Scala, Java, Python y R.

Spark a menudo se compara con Apache Hadoop y específicamente con MapReduce, el componente nativo de procesamiento de datos de Hadoop. La principal diferencia entre Spark y MapReduce es que Spark procesa y mantiene los datos en memoria para los pasos posteriores, sin grabar ni leer del disco, lo que genera velocidades de procesamiento mucho más rápidas (en este artículo encontrará más información sobre cómo Spark se compara y se complementa con Hadoop).

Spark fue desarrollado en 2009 en la UC Berkeley. Hoy en día, la Apache Software Foundation se encarga de su mantenimiento y cuenta con la mayor comunidad de código abierto en torno a big data, con más de 1000 colaboradores. También se incluye como componente principal de varias ofertas comerciales de big data.

Para crear el mejor data lake es necesario escoger el almacenamiento de objetos adecuado, un área en la que Apache Spark puede ayudar considerablemente.

Lea el libro electrónico (909 KB)

Cómo funciona Apache Spark

Apache Spark presenta una arquitectura jerárquica maestro/esclavo. Spark Driver es el nodo maestro que controla el gestor del clúster, que gestiona los nodos de trabajador (esclavo) y entrega los resultados de los datos al cliente de la aplicación.

En función del código de la aplicación, Spark Driver genera el SparkContext, que trabaja con el gestor del clúster —Standalone Cluster Manager de Spark u otros gestores de clúster como Hadoop YARN, Kubernetes o Mesos— para distribuir y supervisar la ejecución en los nodos. También crea conjuntos de datos distribuidos resilientes (RDD, por sus siglas en inglés), que son la clave de la notable velocidad de procesamiento de Spark.

Conjunto de datos distribuido resiliente (RDD)

 

Los conjuntos de datos distribuidos resilientes (RDD) son colecciones de elementos con tolerancia a errores que se pueden distribuir entre varios nodos en un clúster y trabajar en paralelo. Los RDD son una estructura fundamental en Apache Spark.

Spark carga datos haciendo referencia a un origen de datos o paralelizando una colección existente con el método parallelize de SparkContext en un RDD para su procesamiento. Una vez que los datos se cargan en un RDD, Spark realiza transformaciones y acciones en los RDD en memoria: la clave de la velocidad de Spark. Spark también almacena los datos en memoria a menos que el sistema se quede sin memoria o el usuario decida escribir los datos en disco para obtener persistencia.

Cada conjunto de datos en un RDD se divide en particiones lógicas, que pueden calcularse en diferentes nodos del clúster. Por su parte, los usuarios pueden realizar dos tipos de operaciones de RDDtransformaciones y accionesLas transformaciones son operaciones aplicadas para crear un nuevo RDDLas acciones se utilizan para dar instrucciones a Apache Spark para aplicar el cálculo y devolver el resultado al controlador.

Spark admite diversas acciones y transformaciones en los RDD. Esta distribución la realiza Spark, así los usuarios se desentienden del cálculo de la distribución adecuada.

Grafo acíclico dirigido (DAG)

 

A diferencia del proceso de ejecución de dos etapas en MapReduce, Spark crea un grafo acíclico dirigido (DAG, por sus siglas en inglés) para planificar tareas y la orquestación de nodos de trabajador en todo el clúster. A medida que Spark actúa y transforma los datos en los procesos de ejecución de tareas, el planificador de DAG facilita la eficiencia mediante la coordinación de los nodos de trabajador en todo el clúster. Este seguimiento de tareas hace posible la tolerancia a errores, ya que vuelve a aplicar las operaciones registradas a los datos de un estado anterior.

Marcos de datos y conjuntos de datos

 

Además de los RDD, Spark maneja otros dos tipos de datos: marcos de datos y conjuntos de datos.

Los marcos de datos (DataFrames) son las interfaces de programación de aplicaciones (API) estructuradas más comunes y representan una tabla de datos con filas y columnas. Aunque RDD ha sido una función fundamental para Spark, ahora está en modalidad de mantenimiento. Debido a la popularidad de la biblioteca de Machine Learning de Spark (MLlib), los marcos de datos han asumido la función principal como API primaria para MLlib. Es importante tener esto en cuenta cuando se usa la API de MLlib, ya que los marcos de datos proporcionan uniformidad en los diferentes lenguajes, como Scala, Java, Python y R.

Los conjuntos de datos son una ampliación de los marcos de datos que proporcionan una interfaz de programación orientada a objetos con seguridad de tipos. Los conjuntos de datos (Datasets) son, de forma predeterminada, una colección de objetos de JVM clasificados por tipos, a diferencia de los marcos de datos.

Spark SQL permite consultar datos de marcos de datos y almacenes de datos SQL, como Apache Hive. Las consultas de Spark SQL devuelven un marco de datos o un conjunto de datos cuando se ejecutan en otro lenguaje.

Spark Core

 

Spark Core es la base para todo el procesamiento de datos paralelo y maneja la planificación, la optimización, el RDD y la abstracción de datos. Spark Core proporciona la base funcional para las bibliotecas Spark, Spark SQL, Spark Streaming, la biblioteca de machine learning MLlib y el procesamiento de datos de grafos de GraphX. Spark Core y el gestor del clúster distribuyen los datos en el clúster de Spark y los abstraen. Esta distribución y abstracción agilizan el manejo de big data.

API de Spark

 

Spark incluye una variedad de interfaces de programación de aplicaciones (API) para acercar Spark a un público más amplio. Spark SQL permite la interacción con datos de RDD de manera relacional. Spark también dispone de una API bien documentada para Scala, Java, Python y R. Cada API de lenguaje en Spark tiene sus matices específicos en la forma en que maneja los datos. En la API de cada lenguaje hay disponibles RDD, marcos de datos y conjuntos de datos. Con API para tal variedad de lenguajes, Spark da acceso al procesamiento de big data a perfiles de usuario más diversos, con formación en desarrollo, ciencia de datos y estadística.

Productos destacados

Analytics Engine

Apache Spark y machine learning

Spark cuenta con varias bibliotecas que amplían las prestaciones a machine learning, inteligencia artificial (IA) y procesamiento de streams.

Apache Spark MLlib

 

Una de las prestaciones fundamentales de Apache Spark son las capacidades de machine learning disponibles en Spark MLlib. La Apache Spark MLlib proporciona una solución preparada para la clasificación y la regresión, el filtrado colaborativo, la agrupación en clústeres, álgebra lineal distribuida, árboles de decisiones, bosques aleatorios, árboles de potenciación del gradiente, minería de patrones frecuentes, métricas de evaluación y estadística. Las prestaciones de MLlib, combinadas con los distintos tipos de datos que maneja Spark, convierten a Apache Spark en una herramienta indispensable de big data.

Spark GraphX

 

Además de disponer de prestaciones de API, Spark cuenta con Spark GraphX, una nueva incorporación a Spark diseñada para solucionar problemas de grafos. GraphX es una abstracción de grafos que extiende los RDD para grafos y computación paralela de grafos. Spark GraphX se integra con bases de datos de grafos que almacenan información de interconectividad o webs de información de conexión, como la de una red social.

Spark Streaming

 

Spark Streaming es una ampliación de la API de Spark principal que habilita un procesamiento escalable y con tolerancia a errores de secuencias de datos activos. A medida que Spark Streaming procesa datos, puede suministrar datos a sistemas de archivos, bases de datos y paneles de control activos para el análisis de streaming en tiempo real con los algoritmos de procesamiento de grafos y machine learning de Spark. Basado en el motor de Spark SQL, Spark Streaming también permite un procesamiento por lotes incremental, que acelera el procesamiento de datos en streaming.

Enlaces relacionados

Hadoop

Analítica de big data

Spark frente Apache Hadoop y MapReduce

"Spark vs. Hadoop" es una expresión que se busca con frecuencia en la web, pero como se ha señalado anteriormente, Spark es más bien una mejora de Hadoop y, más específicamente, del componente de procesamiento de datos nativos de Hadoop, MapReduce. De hecho, Spark se basa en el marco de trabajo de MapReduce y, actualmente, la mayoría de las distribuciones de Hadoop incluyen Spark.

Al igual que Spark, MapReduce permite a los programadores escribir aplicaciones que procesan grandes conjuntos de datos más rápido mediante el procesamiento de partes del conjunto de datos en paralelo en grandes clústeres de sistemas. Pero mientras que MapReduce procesa datos en disco agregando tiempos de lectura y escritura que ralentizan el proceso, Spark realiza los cálculos en memoria, que es mucho más rápido. Como resultado, Spark puede procesar datos hasta 100 veces más rápido que MapReduce. 

Las API de Spark integradas para varios lenguajes hacen que sean más prácticas y accesibles para los desarrolladores que MapReduce, que tiene reputación de ser difícil de programar. A diferencia de MapReduce, Spark puede ejecutar aplicaciones de procesamiento de streams en clústeres de Hadoop mediante YARN, el marco de trabajo de gestión de recursos y planificación de trabajos de Hadoop. Como se ha indicado anteriormente, Spark añade las prestaciones de MLlib, GraphX y SparkSQL. Además, puede manejar datos de otras fuentes de datos fuera de la aplicación de Hadoop, incluido Apache Kafka.

Por otro lado, Spark es compatible y complementario con Hadoop. Puede procesar datos de Hadoop, incluidos datos de HDFS (el sistema de archivos distribuido de Hadoop), HBase (una base de datos no relacional que se ejecuta en HDFS), Apache Cassandra (una NoSQL alternativa a HDFS) y Hive (un almacén de datos basado en Hadoop).

Soluciones relacionadas
AIOps

Conozca AIOps, un área que aprovecha la analítica, la inteligencia artificial y otras tecnologías para hacer que las operaciones de TI sean más eficientes y efectivas.

Explore AIOps
IBM Spectrum Conductor

Despliegue IBM Spectrum Conductor y otros servicios con confianza para un entorno empresarial multiarrendatario, tanto en local como en cloud.

Explore IBM Spectrum Conductor
IBM Analytics Engine

Analytics Engine es un servicio conjunto de Apache Spark y Apache Hadoop para crear aplicaciones analíticas.

Explore IBM Analytics Engine
Dé el siguiente paso

Spark es una potente herramienta para agregar una solución de datos empresariales que facilita el análisis de big data. También funciona bien con las soluciones de big data de IBM existentes. IBM Spectrum Conductor es una plataforma de multiarrendatario para desplegar y gestionar Apache Spark y otros marcos de aplicaciones en un clúster común compartido de recursos. Spectrum Conductor ofrece gestión de cargas de trabajo, supervisión, alertas, informes y diagnóstico, además es capaz de ejecutar varias versiones actuales y diferentes de Spark y otros marcos de trabajo al mismo tiempo. Los usuarios pueden desplegar y mantener Apache Spark fácilmente con una distribución de Spark integrada.

Explore IBM Spectrum Conductor hoy mismo