¿Qué es Apache Spark?
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 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 capacidad de programación necesarias para Big Data, específicamente para la transmisión de datos, datos de gráficos, machine learning y aplicaciones de inteligencia artificial (IA).

El motor de analítica de Spark procesa datos de 10 a 100 veces más rápido que las alternativas. Se escala distribuyendo el trabajo de procesamiento en grandes grupos de computadoras, con paralelismo incorporado y tolerancia a fallas. Incluso incluye API para lenguajes de programación que son populares entre analistas de datos y científicos de datos, incluidos Scala, Java, Python y R.

Spark a menudo se compara con Apache Hadoop, y específicamente con MapReduce, el componente de procesamiento de datos nativo de Hadoop.

La principal diferencia entre Spark y MapReduce es que Spark procesa y mantiene los datos en la memoria para los pasos posteriores, sin escribir ni leer en el disco, lo que da como resultado velocidades de procesamiento dramáticamente más rápidas. (Encontrará más información acerca de cómo Spark se compara y complementa a Hadoop en otras partes de este artículo).

Spark se desarrolló en 2009 en UC Berkeley. En la actualidad, es mantenido por Apache Software Foundation y cuenta con la mayor comunidad de código abierto en big data, con más de 1,000 colaboradores. También se incluye como un componente central de varias ofertas comerciales de big data.

Crear el mejor data lake significa elegir el almacenamiento de objetos correcto, un área en la que Apache Spark puede ayudar considerablemente.

Lea el e-book (909 KB)

Cómo funciona Apache Spark

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

Basado en el código de la aplicación, Spark Driver genera el SparkContext, que trabaja con el administrador de clústeres, el administrador de clústeres independiente de Spark u otros administradores de clústeres como Hadoop YARN, Kubernetes o Mesos, para distribuir y supervisar la ejecución en los nodos. También crea conjuntos de datos distribuidos resistentes (RDD), que son la clave de la notable velocidad de procesamiento de Spark.

Conjunto de datos distribuidos resilientes (RDD)

 

Los conjuntos de datos distribuidos resilientes (RDD) son colecciones de elementos tolerantes a fallas 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 una fuente de datos o paralelizando una colección existente con el método de paralelización 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 la memoria, la clave de la velocidad de Spark. Spark también almacena los datos en la memoria a menos que el sistema se quede sin memoria o el usuario decida escribir los datos en el disco para su persistencia.

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

Spark admite una variedad de acciones y transformaciones en RDD. Esta distribución la realiza Spark, por lo que los usuarios no tienen que preocuparse por calcular la distribución correcta.

Gráfico acíclico dirigido (DAG)

 

A diferencia del proceso de ejecución de dos etapas en MapReduce, Spark crea un Gráfico acíclico dirigido (DAG) para programar 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 procesos de ejecución de tareas, el programador DAG facilita la eficiencia al orquestar los nodos de trabajador en todo el clúster.

Este seguimiento de tareas hace posible la tolerancia a fallas, ya que vuelve a aplicar las operaciones registradas a los datos de un estado anterior.

DataFrames y conjuntos de datos

 

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

Los 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 característica crítica para Spark, ahora está en modo de mantenimiento. Debido a la popularidad de la biblioteca de machine learning de Spark (MLlib), DataFrames ha asumido el papel principal como API principal para MLlib.

Es importante tener esto en cuenta cuando se usa la API de MLlib, ya que los DataFrames brindan uniformidad en los diferentes lenguajes, como Scala, Java, Python y R.

Los conjuntos de datos son una extensión de DataFrames que proporcionan una interfaz de programación orientada a objetos y con seguridad de tipos. Los conjuntos de datos son, por defecto, una colección de objetos JVM robustamente escritos, a diferencia de DataFrames.

Spark SQL permite consultar datos desde DataFrames y almacenes de datos SQL, como Apache Hive. Las consultas de Spark SQL devuelven un DataFrame o Dataset cuando se ejecutan en otro lenguaje.

Spark Core

 

Spark Core es la base para todo el procesamiento de datos en paralelo y maneja la programación, optimización, RDD y 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 gráficos GraphX. Spark Core y el administrador de clústeres distribuyen datos en el clúster de Spark y los abstraen.

Esta distribución y abstracción hacen que el manejo de Big Data sea muy rápido y fácil de usar.

API de Spark

 

Spark incluye una variedad de interfaces de programación de aplicaciones (API) para llevar el poder de Spark a la audiencia más amplia. Spark SQL permite la interacción con datos RDD de manera relacional.

Spark también tiene 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. Los RDD, DataFrames y Datasets están disponibles en cada API de lenguaje. Con API para tal variedad de lenguajes, Spark hace que el procesamiento de Big Data sea accesible para grupos más diversos de personas con experiencia en desarrollo, ciencia de datos y estadísticas.

Productos destacados

Analytics Engine

Apache Spark y machine learning

Spark tiene varias bibliotecas que amplían las funcionalidade para machine learning, inteligencia artificial (IA) y procesamiento de secuencias.

Apache Spark  MLlib

 

Una de las funcionalidades críticas de Apache Spark son las capacidades de machine learning disponibles en Spark MLlib. Apache Spark  MLlib proporciona una solución lista para usar para realizar clasificación y regresión, filtrado colaborativo, agrupamiento, álgebra lineal distribuida, árboles de decisión, bosques aleatorios, árboles potenciados por gradientes, extracción de patrones frecuentes, métricas de evaluación y estadísticas.

Las funcionalidades de MLlib, combinadas con los diversos tipos de datos que Spark puede manejar, hacen de Apache Spark una herramienta indispensable de Big Data.

Spark GraphX

 

Además de tener funcionalidades de API, Spark tiene Spark GraphX, una nueva adición a Spark diseñada para resolver problemas de gráficos. GraphX es una abstracción de gráficos que amplía los RDD para gráficos y cálculo paralelo de gráficos. Spark GraphX se integra con bases de datos gráficas 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 extensión de la API central de Spark que permite el procesamiento escalable y tolerante a fallas de flujos de datos en vivo. A medida que Spark Streaming procesa datos, puede enviar datos a sistemas de archivos, bases de datos y paneles en vivo para analítica de streaming en tiempo real con los algoritmos de procesamiento de gráficos y machine learning de Spark.

Desarrollado sobre el motor de Spark SQL, Spark Streaming también permite el procesamiento por lotes incremental que da como resultado un procesamiento más rápido de los datos transmitidos.

Enlaces relacionados

Hadoop

Analítica de Big Data

Spark frente a Apache Hadoop y MapReduce

"Spark frente a Hadoop" es un término que se busca con frecuencia en la web, pero como se señaló anteriormente, Spark es más una mejora de Hadoop y, más específicamente, del componente de procesamiento de datos nativo de Hadoop, MapReduce. De hecho, Spark se basa en la infraestructura de MapReduce y, en la actualidad, 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ápidamente al procesar partes del conjunto de datos en paralelo en grandes grupos de computadoras. Pero donde MapReduce procesa datos en el disco, agregando tiempos de lectura y escritura que ralentizan el procesamiento, Spark realiza 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 integradas de Spark para varios lenguajes lo hacen más práctico y accesible para los desarrolladores que MapReduce, que tiene la reputación de ser difícil de programar. A diferencia de MapReduce, Spark puede ejecutar aplicaciones de procesamiento de flujo en clústeres de Hadoop utilizando YARN, la infraestructura de gestión de recursos y programación de trabajos de Hadoop.

Como se señaló anteriormente, Spark agrega las funcionalidades de MLlib, GraphX y SparkSQL. Y Spark puede manejar datos de otras fuentes de datos fuera de la aplicación Hadoop, incluido Apache Kafka.

De lo contrario, Spark es compatible y complementario a Hadoop. Puede procesar datos de Hadoop, incluidos datos de HDFS (el sistema de archivos distribuidos de Hadoop), HBase (una base de datos no relacional que se ejecuta en HDFS), Apache Cassandra (una alternativa NoSQL 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 las AIOps
IBM Spectrum Conductor

Implemente con confianza IBM Spectrum Conductor y otros servicios para un entorno empresarial multi-inquilino, local o en la nube.

Descubra IBM Spectrum Conductor
IBM Analytics Engine

Analytics Engine es un servicio combinado 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 a una solución de datos empresariales para ayudar con el análisis de big data. También se integra bien con las soluciones existentes de big data de IBM. IBM Spectrum Conductor es una plataforma multi-inquilino para implementar y gestionar otras infraestructuras de aplicaciones de Apache Spark en un clúster compartido común de recursos. Spectrum Conductor ofrece administración de carga de trabajo, supervisión, alertas, informes y diagnósticos y puede ejecutar múltiples versiones actuales y diferentes de Spark y otras infraestructuras al mismo tiempo. Los usuarios pueden implementar y mantener Apache Spark fácilmente con una distribución de Spark integrada.

Explore IBM Spectrum Conductor hoy mismo