Novedades de Apache Spark 3.0

Apache Spark 3.0

Apache Spark celebra por todo lo alto su décimo aniversario con una nueva versión. Spark 3.0 incluye un gran número de cambios que mejoran su rendimiento y amplían sus capacidades en big data, sobretodo en la exploración y en el procesamiento de los datos.

El pasado 10 de Junio se publicó la última versión de Apache Spark, la versión 3.0. Ésta es una versión llena de cambios que tendrá un gran calado sobre todo en el área de la ciencia de datos. Y demuestra que, tras diez años, el proyecto open-source de computación distribuida Apache Spark sigue en plena forma. Los cambios e iniciativas de esta última versión muestran la capacidad del proyecto para abarcar cada vez más casos de uso y audiencias más amplias. Es esta evolución la que convierte a Spark en una de las herramientas más usadas en el sector del big data y data science.

+ 0
Mejoras
+ 0
Colaboradores

La versión 3.0 es el resultado de más de 3400 mejoras realizadas por la comunidad de código abierto. Entre los más de 440 colaboradores que han participado para hacerlo posible, podemos encontrar colaboradores individuales y compañías como Google, Microsoft, Intel, IBM, Facebook, Netflix y muchos más.

Entre las características más destacadas de Spark 3.0 encontramos:

  • Mejora del rendimiento de hasta 2 veces sobre Spark 2.4, gracias a la ejecución de consultas adaptativas, la poda de partición dinámica y otras optimizaciones.
  • Compatibilidad con ANSI SQL.
  • Mejoras significativas en la API de Pandas.
  • Mejora en el manejo de los errores de Python, simplificando las excepciones de PySpark.
  • Nueva interfaz de usuario para Spark Structured Streaming.
  • Aumento de hasta 40 veces la velocidad en las llamadas a UDFs de R.

Mejora del motor Spark SQL

El componente que más cambios ha recibido es Spark SQL, con un 46% de las mejoras. Aunque el resto de librerías de alto nivel de Spark también han sufrido mejoras. Todas estas optimizaciones han logrado que Spark 3.0 sea hasta dos veces más rápido que la versión anterior, Spark 2.4.

El nuevo framework de ejecución adaptativa de consultas (Adaptative Query Execution, AQE) mejora el rendimiento y simplifica el ajuste (tuning) generando un mejor plan de ejecución durante el tiempo de ejecución. Debido a la separación del almacenamiento y el procesamiento en Spark, la llegada de datos no es predecible. Por estas razones, la adaptabilidad en tiempo de ejecución es más crítica para Spark que para sistemas tradicionales. Esta versión introduce tres grandes optimizaciones en la adaptabilidad:
  • Fusionar particiones dinámicamente (Dynamically coalescing shuffle partitions), lo que simplifica o incluso evita el ajuste del número de particiones.
  • Cambiar dinámicamente estrategias de unión (Dynamically switching join strategies). Esta optimización evita planes de ejecución subóptimos, lo que simplifica el tuneo y mejora el rendimiento.
  • Optimización dinámica de combinaciones sesgadas (Dynamically optimizing skew joins). Las combinaciones sesgadas pueden desbalancear las cargas de trabajo y afectar gravemente al rendimiento, por lo que con esta optimización AQE consigue una mejora general del rendimiento paralelizando estos procesos.
La poda de particiones dinámica (Dynamic Partition Pruning) se aplica cuando el optimizador no es capaz de identificar en tiempo de compilación las particiones que puede omitir. LLegando a reducir significativamente la carga de trabajo de los procesos. La compatibilidad de ANSI SQL es crítica en la migración de cargas de trabajo de otros motores SQL a Spark SQL. Por lo que para mejorar la compatibilidad, en esta versión se ha cambiado al calendario gregoriano proléptico y también permite a los usuarios prohibir el uso de palabras clave reservadas de ANSI SQL como identificadores. Además, se ha introducido la verificación de desbordamiento en tiempo de ejecución en operaciones numéricas y la aplicación del tipo en tiempo de compilación al insertar datos en una tabla con un esquema predefinido. Estas nuevas validaciones mejoran la calidad del dato.

Mejora de las APIs de Python

La mejora del soporte y la usabilidad de Python en Spark continúa siendo una de las mayores prioridades. De hecho, Python ya es el lenguaje de programación más usado en Spark, superando a Scala. Esto muestra la importancia que se le ha dado en esta versión a la exploración y tratamiento de los datos.

Esta versión mejora las funcionalidad y usabilidad en Python, incluyendo un rediseño de la API de Pandas UDF. A partir de esta versión el uso de las funciones Pandas UDF se hace más sencillo y autodescriptivo, incluyendo dos nuevas funciones: map y co-grouped map. Además se ha mejorado el tratamiento de los errores, haciéndolos más comprensible para los usuarios de PySpark.

 

Del mismo modo que se han añadido unas funcionalidades, también se han suprimido otras. Con la llegada de Spark 3.0 se ha eliminado el soporte a Python 2 y versiones anteriores de R 3.4, y el método UserDefinedAggregateFunction.

Mejoras en Spark Structured Streaming

Esta nueva versión de Apache Spark incluye una nueva interfaz de usuario dedicada para los trabajos en tiempo real. Esta nueva UI muestra dos conjuntos de estadísticas:

  1. Información agregada de consultas en streaming completadas.
  2. Información estadística detallada sobre las consultas en streaming.

En esta versión se introduce la monitorización tanto para aplicaciones batch como aplicaciones streaming.

En este post hemos querido analizar los cambios que consideramos más relevantes, pero la versión 3.0 de Spark trae muchas otras novedades importantes de las que no hemos hablado. Revisa las notas de la versión donde podrás encontrar todas las mejoras, las desestimaciones (deprecations), las guías de migración y programación para cada componente y los temas a resolver en futuras versiones.

Novedades en Apache Spark 3.0

Descarga la nueva versión de Apache Spark

Para descargar esta nueva versión de Spark, visita esta página. La adaptación de las aplicaciones de Apache Spark a esta nueva versión no requiere cambios significativos de código. Para más información consulta la guía de migración.