Introduzione al motore Spark accelerato da Gluten

Il motore Gluten accelerato Spark è un motore ottimizzato ad alte prestazioni in watsonx.data. Il motore Spark utilizza Gluten per scaricare l'esecuzione di SQL su Velox, un motore di esecuzione open source (implementato in C++), accelerando così il calcolo di SparkSQL per ridurre i costi di esecuzione dei carichi di lavoro.

Gluten è un plugin per motori nativi progettato per accelerare i carichi di lavoro di Spark SQL e DataFrame, integrando i motori nativi con SparkSQL, sfruttando l'elevata scalabilità del framework Spark SQL e le prestazioni superiori dei motori nativi. È completamente compatibile con l'API di Apache Spark e non richiede alcuna modifica del codice.

Caratteristiche del motore Spark accelerato Gluten

  • Supporta i formati di file Apache Parquet e Apache Avro.

  • Miglioramento delle prestazioni della scansione delle tabelle.

  • Accelera le query SQL di grandi dimensioni con join e aggregazioni.

  • Supporta i cataloghi Delta, Hudi, Iceberg e Hive.

  • Scrittura più rapida di Delta e Parquet utilizzando UPDATE, DELETE, MERGE INTO, INSERT e CREATE TABLE AS SELECT, anche per tabelle ampie che contengono migliaia di colonne.

  • Sostituisce le giunzioni sort-merge con le giunzioni hash per impostazione predefinita.

Limitazioni

  • L'uso dei negozi di oggetti Amazon S3 supporta DAS per l'invio di applicazioni, ma altri negozi di oggetti come ADLS e GCS richiedono il passaggio di credenziali esplicite.

  • Le query più piccole non vengono accelerate.

  • L'associazione di catalogo è supportata solo per gli archivi di oggetti s3.

  • Fallback alla JVM

    • ANSI: attualmente Gluten non supporta la modalità ANSI. Se ANSI è abilitato, l'esecuzione di un piano Spark ricadrà sempre su Spark vanilla.

    • FileSource formato: Attualmente, Gluten supporta solo il formato di file Parquet e supporta parzialmente ORC. Se viene utilizzato un altro formato, l'operatore di scansione ritorna a vanilla spark.

  • Comportamento incompatibile

    • Funzioni JSON: Velox supporta solo le stringhe circondate da doppi apici, non da apici singoli, nei dati JSON. Se si utilizzano le virgolette singole, Gluten fornisce un risultato errato.

    • Configurazione della lettura di Parquet: Gluten supporta spark.files.ignoreCorruptFiles con l'impostazione predefinita false; se true, il comportamento è lo stesso della configurazione false. Gluten ignora spark.sql.parquet.datetimeRebaseModeInRead, restituisce solo ciò che viene scritto nel file di parquet. Non considera la differenza tra calendario ibrido (giuliano-gregoriano) e calendario gregoriano prolettico. Il risultato potrebbe essere diverso con la scintilla alla vaniglia.

    • Configurazione della scrittura del parquet: Spark dispone della configurazione spark.sql.parquet.datetimeRebaseModeInWrite per decidere se il calendario ibrido legacy (giuliano + gregoriano) o il calendario gregoriano prolettico debba essere usato durante la scrittura del parquet per le date e i timestamp. Se il Parquet da leggere viene scritto da Spark con questa configurazione come true, TableScan di Velox produrrà risultati diversi quando lo rileggerà.

  • Fuoriuscita

    OutOfMemoryException può ancora essere attivato nell'attuale implementazione della funzione spill-to-disk, quando shuffle partitions è impostato su un numero elevato. In questo caso, provare a ridurre il numero di partizioni per eliminare l'OOM.

  • Lettura CSV

    • L'opzione header deve essere vera. Ora supportiamo solo DatasourceV1, cioè l'utente deve impostare spark.sql.sources.useV1SourceList=csv. L'opzione di lettura definita dall'utente non è supportata, per cui nella maggior parte dei casi la lettura di CSV ricadrà su Spark vanilla. La lettura di CSV tornerà anche a Spark vanilla e registrerà un avviso quando l'utente specifica uno schema diverso da quello del file.

    • Per informazioni più dettagliate sulle limitazioni del glutine, vedere Limitazione.

  • Il glutine non è supportato per gli ambienti abilitati FIPS.

Migliori pratiche per il glutine

  • Gluten richiede un'ampia memoria OffHeap poiché si integra con il backend nativo, ossia Velox, utilizzando il formato colonnare Apache Arrow ' OffHeap, essenziale per l'elaborazione di dati su larga scala senza superare i limiti dell'heap della JVM.

  • Se non dispone di una memoria sufficiente su offHeap, potrebbe causare potenziali OOM (vedere Limitazione ). Pertanto, per deault il 75% della memoria dell'esecutore è impostato su offHeap.

  • Gli utenti possono regolare la percentuale di memoria impostata per offHeap, utilizzando la configurazione ae.spark.offHeap.factor, che accetta valori (0-1) esclusivi, ad esempio: 0.75.

  • Si raccomanda agli utenti di impostare questo valore su un valore più basso, cioè < 0.5, se il carico di lavoro prevede molti fallback a spark basato su Java (vedere Limitazione). (vedere Limitazioni ), in modo che non si verifichino OOM durante il ritorno all'esecuzione di spark basata su Java.

  • Si consiglia di impostare un valore più alto, ad esempio 0.75 e oltre, se i carichi di lavoro vengono eseguiti in modo nativo su Gluten senza fallback.

Per impostazione predefinita, il valore impostato è 0.75.