Introducción al motor Spark acelerado por Gluten

Gluten aceleró el motor Spark es un motor optimizado de alto rendimiento en watsonx.data. El motor Spark utiliza Gluten para descargar la ejecución SQL a Velox, que es un motor de ejecución de código abierto (implementado en C++), acelerando así el cálculo de SparkSQL para reducir el coste de ejecución de las cargas de trabajo.

Gluten sirve como plugin de motor nativo diseñado para acelerar las cargas de trabajo de Spark SQL y DataFrame, mediante la integración de motores nativos con SparkSQL, aprovechando la alta escalabilidad del marco Spark SQL y el rendimiento superior de los motores nativos. Es totalmente compatible con la API Apache Spark, por lo que no es necesario modificar el código.

Características del motor Gluten accelerated Spark

  • Admite los formatos de archivo Apache Parquet y Apache Avro.

  • Mejora del rendimiento del escaneado de tablas.

  • Acelera las consultas SQL de mayor tamaño con uniones y agregación.

  • Compatible con los catálogos Delta, Hudi, Iceberg y Hive.

  • Escritura Delta y Parquet más rápida utilizando UPDATE, DELETE, MERGE INTO, INSERT y CREATE TABLE AS SELECT, incluyendo tablas anchas que contienen miles de columnas.

  • Sustituye por defecto las combinaciones de ordenación y fusión por combinaciones de hash.

Limitaciones

  • El uso de almacenes de objetos Amazon S3 admite DAS para el envío de solicitudes, pero otros almacenes de objetos como ADLS y GCS requieren que se pasen credenciales explícitas.

  • Las consultas más pequeñas no se aceleran.

  • La asociación de catálogos sólo es compatible con los almacenes de objetos s3.

  • Fallbacks a JVM

    • ANSI: Gluten no admite actualmente el modo ANSI. Si ANSI está habilitado, la ejecución del plan Spark siempre volverá a vanilla Spark.

    • FileSource formato: Actualmente, Gluten sólo admite el formato de archivo Parquet y admite parcialmente ORC. Si se utiliza otro formato, el operador de escaneado vuelve a vanilla spark.

  • Comportamiento incompatible

    • Funciones JSON: Velox sólo admite cadenas rodeadas de comillas dobles, no simples, en datos JSON. Si se utilizan comillas simples, Gluten da un resultado incorrecto.

    • Configuración de lectura de parquet: Gluten soporta spark.files.ignoreCorruptFiles con false por defecto, si es true, el comportamiento es el mismo que config false. Gluten ignora spark.sql.parquet.datetimeRebaseModeInRead, sólo devuelve lo escrito en el archivo parquet. No tiene en cuenta la diferencia entre el calendario híbrido heredado (gregoriano juliano) y el calendario gregoriano proléptico. El resultado puede ser diferente con la chispa de vainilla.

    • Configuración de escritura de parquet: Spark tiene spark.sql.parquet.datetimeRebaseModeInWrite config para decidir si el calendario híbrido legado (Juliano + Gregoriano) o el calendario Proleptic Gregoriano debe ser usado durante la escritura de parquet para fechas/fechas-hora. Si el Parquet a leer es escrito por Spark con esta configuración como true, el TableScan de Velox arrojará un resultado diferente al leerlo de vuelta.

  • Vertido

    OutOfMemoryException aún puede activarse en la implementación actual de la función de desbordamiento a disco, cuando se establece un gran número de particiones aleatorias. En este caso, intente reducir el número de particiones para eliminar la OOM.

  • Lectura CSV

    • La opción de cabecera debe ser verdadera. Y ahora sólo admitimos DatasourceV1, es decir, el usuario debe configurar spark.sql.sources.useV1SourceList=csv. La opción de lectura definida por el usuario no está soportada, lo que hará que la lectura CSV vuelva a vanilla Spark en la mayoría de los casos. La lectura de CSV también volverá a Spark vainilla y registrará una advertencia cuando el usuario especifique que el esquema es diferente al esquema del archivo.

    • Para obtener información más detallada sobre las limitaciones de Gluten, consulte Limitación.

  • Gluten no es compatible con entornos habilitados para FIPS.

Buenas prácticas para el gluten

  • Gluten requiere una gran memoria OffHeap ya que se integra con el backend nativo, es decir, Velox, utilizando el formato columnar OffHeap de Apache Arrow, que es esencial para el procesamiento de datos a gran escala sin exceder los límites del heap de la JVM.

  • Si no se le proporciona suficiente memoria offHeap, podría provocar posibles OOMs (ver Limitación ). Por tanto, por defecto, el 75% de la memoria del ejecutor está configurada en offHeap.

  • Los usuarios pueden ajustar el porcentaje de memoria destinado a offHeap, mediante la configuración ae.spark.offHeap.factor, que acepta valores (0-1) exclusivos, por ejemplo: 0.75.

  • Se recomienda a los usuarios ajustar este valor a un valor más bajo, es decir, < 0.5 si su carga de trabajo tiene muchos retrocesos a Java basados en spark. (ver Limitación ) para que no ocurra OOM mientras se retrocede a la ejecución de spark basada en Java.

  • Se recomienda establecerlo en un valor más alto, es decir, 0.75 y superior si sus cargas de trabajo se ejecutan de forma nativa en Gluten sin fallback.

Por defecto, el valor establecido es 0.75.