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 nella pipeline di Cloud Data Fusion Studio configurazioni. Per ulteriori informazioni, consulta Gestire le configurazioni della pipeline.

Questa pagina fornisce le linee guida sulla quantità di risorse di driver ed esecutori configurarli 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 molte fasi 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 esecutore determina il numero di attività che esecutore può essere eseguito in parallelo. Ogni partizione di dati richiede un'attività da elaborare. Nella maggior parte dei casi, è più semplice impostare il numero di CPU su uno. concentrati invece 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 i dati che la pipeline.

Spark suddivide la memoria in più sezioni. È riservata una sezione per Spark per uso interno e un'altra per l'esecuzione e l'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 (il valore predefinito è 0,6) controlla questa percentuale. Questo importo funziona bene per la maggior parte dei carichi di lavoro normalmente non devono essere regolati.

La sezione di archiviazione ed esecuzione è a sua volta suddivisa in spazi separati per archiviazione ed esecuzione. Per impostazione predefinita, gli spazi hanno le stesse dimensioni, ma puoi regolale impostando spark.memory.storageFraction (il valore predefinito è 0,5) su controllare la percentuale di spazio riservata all'archiviazione.

Nello spazio di archiviazione sono archiviati i dati memorizzati nella cache. Lo spazio di esecuzione memorizza i dati di ordinamento, unione, 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'esecutore controlla la quantità di memoria heap assegnata all'account esecutori. 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'esecutore su 2048 m, Spark aggiunge 384 m a quel numero e alle richieste YARN per un container di 2432 m. Inoltre, YARN arrotonda il numero di richiesta per eccesso a un multiplo di yarn.scheduler.increment-allocation-mb, che per impostazione predefinita valore di 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 determini la dimensione di ciascun nodo worker nel tuo cluster.