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.ignoreCorruptFilescon l'impostazione predefinita false; se true, il comportamento è lo stesso della configurazione false. Gluten ignoraspark.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.datetimeRebaseModeInWriteper 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.