¿Qué es Apache Spark?
La compañía fundada por los creadores de Spark - Databricks - resume su funcionalidad de la mejor manera en su libro Gentle Intro to Apache Spark eBook (lectura altamente recomendada - enlace a la descarga de PDF proporcionado al final de este artículo):
"Apache Spark es un motor de computación unificado y un conjunto de librerías para el procesamiento paralelo de datos en clusters de computadoras. En el momento de escribir este artículo, Spark es el motor de código abierto más activamente desarrollado para esta tarea; convirtiéndolo en la herramienta de facto para cualquier desarrollador o científico de datos interesado en Big Data. Spark soporta múltiples lenguajes de programación ampliamente utilizados (Python, Java, Scala y R), incluye bibliotecas para diversas tareas que van desde SQL hasta streaming y aprendizaje automático, y funciona en cualquier lugar desde un ordenador portátil hasta un clúster de miles de servidores. Esto lo convierte en un sistema fácil de iniciar y escalar hasta el procesamiento de grandes datos a una escala increíblemente grande".
¿Qué es Big Data?
Veamos la definición ampliamente usada de Gartner de Big Data, para que luego podamos entender cómo Spark opta por abordar muchos de los desafíos asociados con el trabajo con Big Data en tiempo real a escala:
"El Big Data son activos de información de gran volumen, alta velocidad y/o variedad que exigen formas rentables e innovadoras de procesamiento de la información que permitan mejorar el conocimiento, la toma de decisiones y la automatización de los procesos".
Nota: La clave aquí es que lo "grande" en Big Data no es sólo el volumen. No sólo se trata de obtener un montón de datos, sino que también viene: rápido en tiempo real, en un formato complejo, y de una variedad de fuentes. De ahí las 3-Vs de Big Data - Volumen, Velocidad, Variedad.
¿Por qué la mayoría de las compañías de Big Data Analytics tienen "spark en la mira" cuando escuchan sobre todas las funcionalidades útiles de Spark?
Basado en mi investigación preliminar, parece que hay tres componentes principales que hacen de Apache Spark el líder para trabajar eficientemente con Big Data a escala, lo que motiva a muchas grandes compañías que trabajan con grandes cantidades de datos no estructurados, a adoptar Apache Spark en su stack.
-
Spark es un one-stop-shop para trabajar con Big Data - "Spark está diseñado para soportar una amplia gama de tareas de análisis de datos, que van desde la simple carga de datos y consultas SQL hasta el aprendizaje automático y la computación en flujo, sobre el mismo motor de computación y con un conjunto consistente de APIs.
La principal idea que subyace a este objetivo es que las tareas de análisis de datos en el mundo real -ya se trate de análisis interactivos en una herramienta, como un notebook de Jupyter, o de desarrollo de software tradicional para aplicaciones de producción- tienden a combinar muchos tipos y bibliotecas de procesamiento diferentes.
La naturaleza unificada de Spark hace que estas tareas sean más fáciles y eficientes de escribir" (Databricks eBook).
Por ejemplo, si se cargan datos mediante una consulta SQL y luego se evalúa un modelo de aprendizaje automático sobre él utilizando una biblioteca ML de Spark, el motor puede combinar estos pasos en una sola exploración sobre los datos.
Además, los científicos de datos pueden beneficiarse de un conjunto unificado de bibliotecas (por ejemplo, Python o R) al realizar el modelado, y los desarrolladores web pueden beneficiarse de marcos unificados como Node.js o Django.
-
Spark optimiza su motor central para la eficiencia de los cálculos - "con esto queremos decir que Spark sólo maneja la carga de datos de los sistemas de almacenamiento y la realización de cálculos en ellos, no el almacenamiento permanente como fin en sí mismo.
Spark puede ser usado con una amplia variedad de sistemas de almacenamiento persistente, incluyendo sistemas de almacenamiento en la nube como Azure Storage y Amazon S3, sistemas de archivos distribuidos como Apache Hadoop, almacenes de clave-valor como Apache Cassandra, y buses de mensajes como Apache Kafka.
Sin embargo, Spark no almacena los datos a largo plazo por sí misma ni favorece a ninguno de ellos. La motivación clave aquí es que la mayoría de los datos ya residen en una mezcla de sistemas de almacenamiento.
Los datos son caros de mover, así que Spark se centra en realizar cálculos sobre los datos, sin importar dónde residan" (Databricks eBook). El enfoque de Spark en la computación lo hace diferente de las anteriores grandes plataformas de software de datos como Apache Hadoop.
Hadoop incluía tanto un sistema de almacenamiento (el sistema de archivos Hadoop, diseñado para el almacenamiento de bajo costo sobre clusters de servidores de productos básicos de Defining Spark 4) como un sistema de computación (MapReduce), que estaban estrechamente integrados entre sí.
Sin embargo, esta elección dificulta la ejecución de uno de los sistemas sin el otro o, lo que es más importante, la escritura de aplicaciones que accedan a datos almacenados en cualquier otro lugar. Si bien Spark funciona bien en el almacenamiento Hadoop, actualmente también se utiliza ampliamente en entornos en los que la arquitectura Hadoop no tiene sentido, como la nube pública (en la que el almacenamiento puede adquirirse por separado de la computación) o las aplicaciones de streaming.
-
Las bibliotecas de Spark le dan una gama muy amplia de funcionalidades - Hoy en día, las bibliotecas estándar de Spark son el grueso del proyecto de código abierto.
El motor central de Spark en sí mismo ha cambiado poco desde de que fue lanzado por primera vez, pero las bibliotecas han crecido para proporcionar cada vez más tipos de funcionalidad, convirtiéndolo en una herramienta multifuncional de análisis de datos.
Spark incluye bibliotecas para SQL y datos estructurados (Spark SQL), aprendizaje automático (MLlib), procesamiento de flujos (Spark Streaming y el más reciente Structured Streaming), y análisis de gráficos (GraphX).
Más allá de estas bibliotecas, hay cientos de bibliotecas externas de código abierto que van desde conectores para varios sistemas de almacenamiento hasta algoritmos de aprendizaje automático.
Apache Spark vs. Hadoop MapReduce... ¿Cuál debería usar?
La respuesta corta es - depende de las necesidades particulares de su negocio, pero basado en mi investigación, parece que 7 de cada 10 veces la respuesta será - Spark. El procesamiento lineal de enormes conjuntos de datos es la ventaja de Hadoop MapReduce, mientras que Spark ofrece un rápido rendimiento, procesamiento iterativo, análisis en tiempo real, procesamiento de gráficos, aprendizaje automático y más.
La gran noticia es que Spark es totalmente compatible con el ecosistema Hadoop y funciona sin problemas con el Sistema de Archivos Distribuidos Hadoop (HDFS), Apache Hive, y otros.
Así que, cuando el tamaño de los datos es demasiado grande para que Spark lo maneje en memoria, Hadoop puede ayudar a superar ese obstáculo a través de su funcionalidad HDFS.
A continuación se muestra un ejemplo visual de cómo Spark y Hadoop pueden trabajar juntos:
A continuación, trataré de destacar las muchas ventajas de Spark sobre Hadoop MapReduce realizando una breve comparación cara a cara entre ambos.
- Apache Spark, es una herramienta de computación en clúster que trabaja a la velocidad de la luz. Spark ejecuta las aplicaciones hasta 100 veces más rápido en memoria y 10 veces más rápido en disco que Hadoop, reduciendo el número de ciclos de lectura-escritura en disco y almacenando los datos intermedios en memoria.
- Hadoop MapReduce - MapReduce lee y escribe desde el disco, lo que reduce la velocidad de procesamiento y la eficiencia general.
Facilidad de uso
- Apache Spark - Las muchas bibliotecas de Spark facilitan la ejecución de muchos de los principales operadores de alto nivel con RDD (Resilient Distributed Dataset).
- Hadoop - En MapReduce, los desarrolladores necesitan codificar a mano cada operación, lo que puede hacer más difícil su uso para proyectos complejos a escala.
Manejo de grandes conjuntos de datos
- Apache Spark - ya que Spark está optimizado para la velocidad y la eficiencia computacional al almacenar la mayoría de los datos en la memoria y no en el disco, puede tener un rendimiento inferior al de Hadoop MapReduce cuando el tamaño de los datos es tan grande que la insuficiencia de la memoria RAM se convierte en un problema.
- Hadoop - Hadoop MapReduce permite el procesamiento paralelo de grandes cantidades de datos. Rompe un gran trozo en otros más pequeños para ser procesados por separado en diferentes nodos de datos. En caso de que el conjunto de datos resultante sea más grande que la RAM disponible, Hadoop MapReduce puede superar a Spark. Es una buena solución si la velocidad de procesamiento no es crítica y las tareas pueden dejarse en marcha durante la noche para generar resultados por la mañana.
Funcionalidad
Apache Spark es el ganador indiscutible en esta categoría. A continuación se muestra una lista de las muchas tareas de Big Data Analytics en las que Spark supera a Hadoop:
- Procesamiento iterativo. Si la tarea es procesar datos una y otra vez - Spark derrota a Hadoop MapReduce. Los Resilient Distributed Datasets (RDDs) de Spark permiten múltiples operaciones de mapas en memoria, mientras que Hadoop MapReduce tiene que escribir los resultados provisionales en un disco.
- Procesamiento casi en tiempo real. Si una empresa necesita conocimientos inmediatos, entonces debe optar por Spark y su procesamiento en memoria.
- Procesamiento de gráficos. El modelo computacional de Spark es bueno para los cálculos iterativos que son típicos en el procesamiento de gráficos. Y Apache Spark tiene GraphX - una API para el cálculo de gráficos.
- Aprendizaje automático. Spark tiene MLlib - una biblioteca de aprendizaje automático incorporada, mientras que Hadoop necesita un tercero para proporcionarla. MLlib tiene algoritmos listos para usar que también se ejecutan en memoria.
- Uniendo conjuntos de datos. Debido a su velocidad, Spark puede crear todas las combinaciones más rápido, aunque Hadoop puede ser mejor si se unen conjuntos de datos muy grandes que requieren mucha mezcla y clasificación.
Un resumen visual de las muchas capacidades de Spark y su compatibilidad con otros motores de Big Data y lenguajes de programación:
- Spark Core - Spark Core es el motor base para el procesamiento paralelo y distribuido de datos a gran escala. Además, las bibliotecas adicionales que se construyen sobre el núcleo permiten diversas cargas de trabajo para streaming, SQL y aprendizaje automático. Es responsable de la administración de la memoria y la recuperación de fallas, la programación, la distribución y el monitoreo de los trabajos en un clúster y la interacción con los sistemas de almacenamiento.
- Administración de clústeres - El administrador de clústeres se utiliza para adquirir recursos de clústeres para la ejecución de trabajos. El núcleo de Spark funciona sobre diversos administradores de clusters, incluyendo Hadoop YARN, Apache Mesos, Amazon EC2 y el administrador de clusters incorporado de Spark. El administrador del clúster se encarga de compartir recursos entre las aplicaciones de Spark. Por otro lado, Spark puede acceder a datos en HDFS, Cassandra, HBase, Hive, Alluxio, y cualquier fuente de datos Hadoop
- Spark Streaming - Spark Streaming es el componente de Spark que se utiliza para procesar datos de transmisión en tiempo real.
- Spark SQL: Spark SQL es un nuevo módulo en el Spark que integra el procesamiento relacional con la API de programación funcional del Spark. Soporta la consulta de datos ya sea a través de SQL o a través de Hive Query Language. Las API de DataFrame y Dataset de Spark SQL proporcionan un mayor nivel de abstracción para los datos estructurados.
- GraphX: GraphX es la API de Spark para gráficos y cálculo paralelo de gráficos. Por lo tanto, extiende Spark RDD con un Resilient Distributed Property Graph.
- MLlib (Machine Learning): MLlib significa Machine Learning Library. Spark MLlib se utiliza para realizar el aprendizaje automático en Apache Spark.
Conclusión
Con la explosión masiva de Big Data y el aumento exponencial de la velocidad de la potencia de cálculo, herramientas como Apache Spark y otros motores de Big Data Analytics pronto serán indispensables para los científicos de datos y se convertirán rápidamente en el estándar de la industria para la realización de Big Data Analytics y la resolución de complejos problemas empresariales a escala en tiempo real.
Para aquellos interesados en profundizar en la tecnología que hay detrás de todas esas funcionalidades, por favor haga clic en el enlace de abajo y descargue el eBook de Databricks - "A Gentle Intro to Apache Spark", o consulte "Big Data Analytics on Apache Spark" a continuación.