Apache Spark definido
chispa apache es un marco de procesamiento de datos que puede realizar rápidamente tareas de procesamiento en conjuntos de datos muy grandes y también puede distribuir tareas de procesamiento de datos entre varias computadoras, ya sea por sí solo o en conjunto con otras herramientas informáticas distribuidas. Estas dos cualidades son clave para los mundos de big data y aprendizaje automático, que requieren la movilización de una potencia informática masiva para procesar grandes almacenes de datos. Spark también elimina algunas de las cargas de programación de estas tareas de los desarrolladores con una interfaz fácil de usar. API que abstrae gran parte del trabajo pesado de la computación distribuida y el procesamiento de big data.
¿Qué es Spark en big data?
Cuando la gente habla de “grandes datos”, generalmente se refieren al rápido crecimiento de datos de todo tipo: datos estructurados en tablas de bases de datos, datos no estructurados en documentos comerciales y correos electrónicos, y datos semiestructurados en archivos de registro del sistema y páginas web. Mientras que en años pasados la analítica se centraba en datos estructurados y giraba en torno a la almacén de datosla analítica actual obtiene conocimientos de todo tipo de datos y gira en torno a lago de datos. Apache Spark fue diseñado específicamente para este nuevo paradigma.
Desde sus humildes comienzos en el AMPLab En UC Berkeley en 2009, Apache Spark se ha convertido en uno de los marcos de procesamiento distribuido de big data clave del mundo. Spark se puede implementar de varias maneras, proporciona enlaces nativos para el JavaEscala, Pitóny lenguajes de programación Ry apoya SQL, transmisión de datosaprendizaje automático y procesamiento de gráficos. Lo encontrará utilizado por bancos, empresas de telecomunicaciones, empresas de juegos, gobiernos y todos los principales gigantes tecnológicos como Apple, IBM, Meta y Microsoft.
chispa RDD
En el corazón de Apache Spark está el concepto de Conjunto de datos distribuidos resilientes (RDD), una abstracción de programación que representa una colección inmutable de objetos que se pueden dividir en un clúster informático. Las operaciones en los RDD también se pueden dividir en todo el clúster y ejecutar en un proceso por lotes paralelo, lo que lleva a un procesamiento paralelo rápido y escalable. Apache Spark convierte los comandos de procesamiento de datos del usuario en un Gráfico Acíclico Dirigidoo DAG. El DAG es la capa de programación de Apache Spark; determina qué tareas se ejecutan en qué nodos y en qué secuencia.
Los RDD se pueden crear a partir de archivos de texto simples, bases de datos SQL, almacenes NoSQL (como Cassandra y MongoDB), depósitos de Amazon S3 y mucho más. Gran parte de la API Spark Core se basa en este concepto RDD, lo que permite la funcionalidad tradicional de mapeo y reducción, pero también brinda soporte integrado para unir conjuntos de datos, filtrar, muestrear y agregar.
Spark se ejecuta de forma distribuida combinando un conductor Proceso central que divide una aplicación Spark en tareas y las distribuye entre muchas ejecutor procesos que realizan el trabajo. Estos ejecutores se pueden escalar hacia arriba y hacia abajo según sea necesario para las necesidades de la aplicación.
Chispa SQL
Chispa SQL se ha vuelto cada vez más importante para el proyecto Apache Spark. Es la interfaz más utilizada por los desarrolladores actuales a la hora de crear aplicaciones. Spark SQL se centra en el procesamiento de datos estructurados, utilizando un enfoque de marco de datos tomado de R y Python (en Pandas). Pero como sugiere el nombre, Spark SQL también proporciona una interfaz compatible con SQL2003 para consultar datos, brindando el poder de Apache Spark tanto a analistas como a desarrolladores.
Además de la compatibilidad con SQL estándar, Spark SQL proporciona una interfaz estándar para leer y escribir en otros almacenes de datos, incluidos JSON, HDFS, Apache Hive, JDBC, Apache ORC y Apache Parquet, todos los cuales son compatibles desde el primer momento. Se pueden utilizar otros almacenes de datos populares (Apache Cassandra, MongoDB, Apache HBase y muchos otros) conectando conectores separados del Paquetes de chispa ecosistema. Spark SQL permite que las funciones definidas por el usuario (UDF) se utilicen de forma transparente en consultas SQL.
Seleccionar algunas columnas de un marco de datos es tan simple como esta línea de código:
citiesDF.select(“name”, “pop”)
Usando la interfaz SQL, registramos el marco de datos como una tabla temporal, después de lo cual podemos emitir consultas SQL sobre él:
citiesDF.createOrReplaceTempView(“cities”) spark.sql(“SELECT name, pop FROM cities”)
Detrás de escena, Apache Spark utiliza un optimizador de consultas llamado Catalizador que examina datos y consultas para producir un plan de consulta eficiente para la localidad de datos y el cálculo que realizará los cálculos necesarios en todo el clúster. Desde Apache Spark 2.x, la interfaz Spark SQL de marcos de datos y conjuntos de datos (esencialmente un marco de datos escrito que se puede verificar en tiempo de compilación para verificar su corrección y aprovechar más memoria y optimizaciones informáticas en tiempo de ejecución) ha sido el enfoque recomendado para el desarrollo. La interfaz RDD todavía está disponible, pero se recomienda solo si sus necesidades no pueden abordarse dentro del paradigma Spark SQL (como cuando debe trabajar en un nivel inferior para exprimir hasta la última gota de rendimiento del sistema).
Chispa MLlib y MLflow
Apache Spark también incluye bibliotecas para aplicar técnicas de análisis de gráficos y aprendizaje automático a datos a escala. MLlib incluye un marco para crear canales de aprendizaje automático, lo que permite una fácil implementación de extracción, selección y transformación de características en cualquier conjunto de datos estructurados. MLlib viene con implementaciones distribuidas de algoritmos de agrupación y clasificación, como agrupación de k-means y bosques aleatorios, que se pueden intercambiar dentro y fuera de canalizaciones personalizadas con facilidad. Los científicos de datos pueden entrenar los modelos en Apache Spark usando R o Python, guardarlos usando MLlib y luego importarlos a una canalización basada en Java o Scala para uso en producción.
Una plataforma de código abierto para gestionar el ciclo de vida del aprendizaje automático. flujo ml Técnicamente no es parte del proyecto Apache Spark, pero también es un producto de Ladrillos de datos y otros en la comunidad Apache Spark. La comunidad ha estado trabajando en la integración de MLflow con Apache Spark para proporcionar MLOps características como seguimiento de experimentos, registros de modelos, empaquetado y UDF que se pueden importar fácilmente para inferencias a escala de Apache Spark y con declaraciones SQL tradicionales.
Transmisión estructurada
Transmisión estructurada es una API de alto nivel que permite a los desarrolladores crear infinitos conjuntos de datos y marcos de datos de transmisión. A partir de Spark 3.0, Structured Streaming es la forma recomendada de manejar datos de streaming dentro de Apache Spark, reemplazando a la anterior. Transmisión de chispa acercarse. Spark Streaming (ahora marcado como un componente heredado) estaba lleno de puntos débiles para los desarrolladores, especialmente cuando se trataba de agregaciones en el momento de eventos y entrega tardía de mensajes.
Todas las consultas sobre transmisiones estructuradas pasan por el optimizador de consultas Catalyst e incluso se pueden ejecutar de manera interactiva, lo que permite a los usuarios realizar consultas SQL contra datos de transmisión en vivo. La compatibilidad con mensajes tardíos se proporciona mediante mensajes con marcas de agua y tres tipos admitidos de técnicas de ventanas: ventanas giratorias, ventanas deslizantes y ventanas de tiempo de duración variable con sesiones.
En Spark 3.1 y versiones posteriores, puede tratar las secuencias como tablas y las tablas como secuencias. La capacidad de combinar múltiples flujos con una amplia gama de uniones de flujo a flujo similares a SQL crea poderosas posibilidades de ingesta y transformación. A continuación se muestra un ejemplo sencillo de cómo crear una tabla a partir de una fuente de streaming:
val df = spark.readStream .format("rate") .option("rowsPerSecond", 20) .load() df.writeStream .option("checkpointLocation", "checkpointPath") .toTable("streamingTable") spark.read.table("myTable").show()
La transmisión estructurada, de forma predeterminada, utiliza un esquema de micro lotes para manejar datos de transmisión. Pero en Spark 2.3, el equipo de Apache Spark agregó una función de baja latencia. Procesamiento continuo modo a Streaming estructurado, lo que le permite manejar respuestas con latencias impresionantes de tan solo 1 ms y lo hace mucho más competitivo con rivales como Apache Flink y Haz Apache. El procesamiento continuo lo restringe a operaciones de selección y similares a mapas, y si bien admite consultas SQL contra secuencias, actualmente no admite agregaciones SQL. Además, aunque Spark 2.3 llegó en 2018, a partir de Spark 3.3.2 en marzo de 2023, el Procesamiento Continuo es aún marcado como experimental.
Structured Streaming es el futuro de las aplicaciones de streaming con la plataforma Apache Spark, por lo que si está creando una nueva aplicación de streaming, debe utilizar Structured Streaming. Las API heredadas de Spark Streaming seguirán siendo compatibles, pero el proyecto recomienda migrar a Structured Streaming, ya que el nuevo método hace que escribir y mantener el código de transmisión sea mucho más llevadero.
lago delta
Al igual que MLflow, lago delta Es técnicamente un proyecto separado de Apache Spark. Sin embargo, en los últimos años, Delta Lake se ha convertido en una parte integral del ecosistema Spark, formando el núcleo de lo que Databricks llama el Arquitectura de la casa del lago. Delta Lake aumenta los lagos de datos basados en la nube con transacciones ACID, semántica de consulta unificada para procesamiento por lotes y flujos y aplicación de esquemas, eliminando efectivamente la necesidad de un almacén de datos separado para los usuarios de BI. El historial de auditoría completo y la escalabilidad para manejar exabytes de datos también forman parte del paquete.
Y usar el formato Delta Lake (creado sobre archivos Parquet) dentro de Apache Spark es tan simple como usar el delta
formato:
df = spark.readStream.format("rate").load() stream = df .writeStream .format("delta") .option("checkpointLocation", "checkpointPath") .start("deltaTable")
API de Pandas en Spark
El estándar de la industria para la manipulación y análisis de datos en Python es el pandas biblioteca. Con Apache Spark 3.2, se proporcionó una nueva API que permite utilizar una gran proporción de la API de Pandas de forma transparente con Spark. Ahora los científicos de datos pueden simplemente reemplazar sus importaciones con import pyspark.pandas as pd
y tener cierta confianza en que su código seguirá funcionando, y también aprovechar la ejecución multinodo de Apache Spark. Por el momento, alrededor del 80% de la API de Pandas está cubierta, con un objetivo de cobertura del 90% en próximas versiones.
Ejecutando Apache Spark
En un nivel fundamental, una aplicación Apache Spark consta de dos componentes principales: un conductorque convierte el código del usuario en múltiples tareas que se pueden distribuir entre nodos trabajadores, y ejecutores, que se ejecutan en esos nodos trabajadores y ejecutan las tareas que se les asignan. Es necesaria alguna forma de administrador de clústeres para mediar entre los dos.
De fábrica, Apache Spark puede ejecutarse en un modo de clúster independiente que simplemente requiere el marco Apache Spark y una máquina virtual Java en cada nodo de su clúster. Sin embargo, es más probable que desee aprovechar una gestión de recursos o un sistema de gestión de clústeres más sólido para encargarse de asignar trabajadores según sus necesidades.
En la empresa, esto históricamente significó funcionar con HILO Hadoop (YARN es la forma en que las distribuciones Cloudera y Hortonworks ejecutan trabajos de Spark), pero a medida que Hadoop se ha vuelto menos arraigado, cada vez más empresas han recurrido a la implementación de Apache Spark en Kubernetes. Esto se ha reflejado en las versiones de Apache Spark 3.x, que mejoran la integración con Kubernetes, incluida la capacidad de definir plantillas de pod para controladores y ejecutores y utilizar programadores personalizados como Volcán.
Si busca una solución administrada, las ofertas de Apache Spark se pueden encontrar en las tres grandes nubes: EMR de Amazon, Azure HDInsighty Proceso de datos de Google Cloud.
Plataforma Lakehouse de Databricks
Ladrillos de datos, la empresa que emplea a los creadores de Apache Spark, ha adoptado un enfoque diferente al de muchas otras empresas fundadas en productos de código abierto de la era del Big Data. Durante muchos años, Databricks ha ofrecido un servicio de nube administrado integral que ofrece clústeres de Apache Spark, soporte de transmisión, desarrollo de portátiles integrado basado en web y rendimiento de E/S optimizado de propiedad sobre una distribución estándar de Apache Spark. Esta combinación de servicios administrados y profesionales ha convertido a Databricks en un gigante en el campo de Big Data, con una valoración estimada en 38 mil millones de dólares en 2021. La plataforma Databricks Lakehouse ahora está disponible en los tres principales proveedores de nube y se está convirtiendo en la de hecho forma en que la mayoría de las personas interactúan con Apache Spark.
Tutoriales de Apache Spark
¿Listo para sumergirse y aprender Apache Spark? Recomendamos comenzar con el Portal de aprendizaje de ladrillos de datos, que proporcionará una buena introducción al marco, aunque estará ligeramente sesgado hacia la plataforma Databricks. Para profundizar más, sugerimos el Taller de chispa, que es un recorrido exhaustivo por las características de Apache Spark a través de una lente Scala. Algunos libros excelentes también están disponibles. Spark: la guía definitiva es una maravillosa introducción escrita por dos mantenedores de Apache Spark. Y Chispa de alto rendimiento es una guía esencial para procesar datos con Apache Spark a escalas masivas de manera eficiente. ¡Feliz aprendizaje!
Copyright © 2024 IDG Communications, Inc.