Gestione delle risorse

Le pipeline ti consentono di specificare le CPU e la memoria da assegnare al driver e a ogni Executor. Puoi configurare le risorse nelle configurazioni della pipeline di Cloud Data Fusion Studio. Per ulteriori informazioni, consulta Gestire le configurazioni delle pipeline.

Questa pagina fornisce le linee guida su quante risorse di driver ed executor configurare per il tuo caso d'uso.

Driver

Poiché il driver non esegue molto lavoro, il valore predefinito di 1 CPU e 2 GB di memoria è sufficiente per eseguire la maggior parte delle pipeline. Potresti dover aumentare la memoria per le pipeline che contengono molti passaggi o schemi di grandi dimensioni. Come accennato in Elaborazione parallela delle unioni, se la pipeline esegue unioni in memoria, i set di dati in memoria devono essere contenuti anche nella memoria del driver.

Esecutore testamentario

Tieni presenti le seguenti linee guida sulle risorse di CPU e memoria.

CPU

Il numero di CPU assegnate a un executor determina il numero di attività che l'executor può eseguire in parallelo. Ogni partizione di dati richiede un'attività da elaborare. Nella maggior parte dei casi, è più semplice impostare il numero di CPU su 1 e concentrarsi sulla regolazione della memoria.

Memoria

Per la maggior parte delle pipeline, 4 GB di memoria dell'executor sono sufficienti per eseguire correttamente la pipeline. Sono stati completati join fortemente sbilanciati di più terabyte con 4 GB di memoria dell'executor. È possibile migliorare la velocità di esecuzione aumentando la quantità di memoria, ma questo richiede una conoscenza approfondita sia dei dati sia della pipeline.

Spark suddivide la memoria in più sezioni. Una sezione è riservata all'utilizzo interno di Spark, mentre un'altra è destinata all'esecuzione e allo spazio di archiviazione.

Per impostazione predefinita, la sezione di archiviazione ed esecuzione occupa circa il 60% della memoria totale. La proprietà spark.memory.fraction configuration di Spark (valore predefinito 0,6) controlla questa percentuale. Questo valore ha un buon rendimento per la maggior parte dei carichi di lavoro e normalmente non deve essere modificato.

La sezione di archiviazione ed esecuzione è ulteriormente suddivisa in spazi separati per archiviazione ed esecuzione. Per impostazione predefinita, questi spazi hanno le stesse dimensioni, ma puoi aggiustare impostando spark.memory.storageFraction (il valore predefinito è 0,5) per controllare la percentuale di spazio riservata allo spazio di archiviazione.

Lo spazio di archiviazione memorizza i dati memorizzati nella cache. Lo spazio di esecuzione memorizza i dati di ordinamento, join, smistamento e aggregazione. Se nella sezione di esecuzione è presente spazio aggiuntivo, Spark può utilizzarne una parte per l'archiviazione dei dati. Tuttavia, i dati di esecuzione non utilizzeranno mai lo spazio di archiviazione.

Se sai che la pipeline non memorizza nella cache alcun dato, puoi ridurre la frazione di spazio di archiviazione per lasciare più spazio per i requisiti di esecuzione.

Punto da considerare: memoria del contenitore YARN

L'impostazione della memoria dell'executor controlla la quantità di memoria heap assegnata agli executor. Spark aggiunge una quantità aggiuntiva di memoria per la memoria off-heap, che è controllata dall'impostazione spark.executor.memoryOverhead, il cui valore predefinito è 384 MB. Ciò significa che la quantità di memoria riservata da YARN per ogni executor è superiore al numero impostato nella configurazione delle risorse della pipeline. Ad esempio, se imposti la memoria dell'executor su 2048 MB, Spark aggiunge 384 MB a questo numero e richiede a YARN un contenitore di 2432 MB. Inoltre, YARN arrotonda il numero di richieste per un múltiplo di yarn.scheduler.increment-allocation-mb, che per impostazione predefinita è pari al valore yarn.scheduler.minimum-allocation-mb. Se è impostato su 512, YARN arrotonda i 2432 MB a 2560 MB. Se il valore è impostato su 1024, YARN arrotonda per eccesso 2432 MB a 3072 MB. Questo punto è utile da tenere presente quando si determinano le dimensioni di ciascun nodo worker nel cluster.