Per impostazione predefinita, Cloud Data Fusion utilizzava Autoscale come profilo di calcolo. È difficile stimare il numero ottimale di worker (nodi) del cluster per un carico di lavoro e spesso una singola dimensione del cluster per un'intera pipeline non è ideale. La scalabilità automatica di Dataproc offre un meccanismo per automatizzare la gestione delle risorse del cluster e consente la scalabilità automatica delle VM worker del cluster. Per ulteriori informazioni, consulta Scalabilità automatica.
Nella pagina Configurazione di calcolo, in cui puoi vedere un elenco di profili, è presente la colonna Core totali, che indica il numero massimo di CPU virtuali a cui può essere eseguito l'upgrade del profilo, ad esempio Up to 84
.
Se vuoi utilizzare il profilo di calcolo Dataproc , puoi gestire le dimensioni dei cluster in base alle dimensioni della pipeline.
Nodo master
I nodi master utilizzano risorse proporzionali al numero di pipeline o applicazioni aggiuntive in esecuzione nel cluster. Se esegui pipeline su cluster temporanei, utilizza 2 CPU e 8 GB di memoria per i nodi master. Se utilizzi cluster permanenti, potresti aver bisogno di nodi master più grandi per tenere il passo con il flusso di lavoro. Per capire se hai bisogno di nodi master più grandi, puoi monitorare l'utilizzo della memoria e della CPU sul nodo. Ti consigliamo di determinare le dimensioni dei nodi worker con almeno 2 CPU e 8 GB di memoria. Se hai configurato le pipeline in modo che utilizzino quantità maggiori di memoria, devi utilizzare worker di dimensioni maggiori.
Per ridurre al minimo il tempo di esecuzione, assicurati che il cluster disponga di nodi sufficienti per consentire il maggior numero possibile di elaborazioni in parallelo.
Worker
Le sezioni seguenti descrivono gli aspetti relativi alla definizione delle dimensioni dei nodi worker.
CPU e memoria
Ti consigliamo di determinare le dimensioni dei nodi worker con almeno 2 CPU e 8 GB di memoria. Se hai configurato le pipeline per utilizzare quantità maggiori di memoria, utilizza worker di dimensioni maggiori. Ad esempio, con un nodo worker da 4 CPU e 15 GB, ogni worker avrà 4 CPU e 12 GB disponibili per l'esecuzione di contenitori YARN. Se la pipeline è configurata per l'esecuzione di 1 CPU e 8 GB di esecuzioni, YARN non è in grado di eseguire più di un contenitore per nodo worker. Ogni nodo worker avrebbe 3 CPU e 4 GB in più che vengono sprecati perché non possono essere utilizzati per eseguire alcun programma. Per massimizzare l'utilizzo delle risorse nel cluster, la memoria e le CPU YARN devono essere un multiplo esatto della quantità necessaria per ogni Executor Spark. Puoi controllare la quantità di memoria che ogni worker ha riservato per YARN controllando la proprietà yarn.nodemanager.resource.memory-mb
in YARN.
Se utilizzi Dataproc, la memoria disponibile per i contenitori YARN sarà approssimativamente il 75% della memoria della VM. Anche le dimensioni minime del contenitore YARN vengono regolate in base alle dimensioni delle VM worker. Alcune dimensioni comuni dei worker e le relative impostazioni YARN sono riportate nella tabella seguente.
CPU worker | Memoria del worker (GB) | Memoria del nodo YARN (GB) | Memoria di allocazione minima YARN (MB) |
---|---|---|---|
1 | 4 | 3 | 256 |
2 | 8 | 6 | 512 |
4 | 16 | 12 | 1024 |
8 | 32 | 24 | 1024 |
16 | 64 | 51 | 1024 |
Tieni presente che Spark richiede più memoria rispetto alla memoria dell'executor impostata per la pipeline e che YARN arrotonda per eccesso la quantità richiesta. Ad esempio, supponiamo che tu abbia impostato la memoria dell'executor su 2048 MB e non abbia fornito un valore per spark.yarn.executor.memoryOverhead
, il che significa che viene utilizzato il valore predefinito di 384 MB. Ciò significa che Spark richiede 2048 MB + 384 MB per ogni executor, che YARN arrotonda per eccesso a un multiplo esatto dell'allocazione minima di YARN. Quando viene eseguito su un nodo worker da 8 GB, poiché l'allocazione minima di YARN è di 512 MB, viene arrotondata per eccesso a 2,5 GB. Ciò significa che ogni worker può eseguire due container, utilizzando tutte le CPU disponibili, ma lasciando inutilizzato 1 GB di memoria YARN (6 GB - 2,5 GB - 2,5 GB). Ciò significa che il nodo worker può essere leggermente più piccolo o che agli esecutori può essere assegnata un po' più di memoria.
Quando viene eseguito su un nodo worker da 16 GB, 2048 MB + 1024 MB viene arrotondata a 3 GB perché l'allocazione minima di YARN è 1024 MB.
Ciò significa che ogni nodo worker è in grado di eseguire quattro container, con tutte le CPU e la memoria YARN in uso.
Per fornire un contesto, la tabella seguente mostra le dimensioni consigliate per i worker in base ad alcune dimensioni comuni degli executor.
CPU dell'eseguitore | Memoria dell'eseguitore (MB) | CPU del worker | Memoria del worker ( GB) |
---|---|---|---|
1 | 2048 | 4 | 15 |
1 | 3072 | 4 | 21 |
1 | 4096 | 4 | 26 |
2 | 8192 | 4 | 26 |
Ad esempio, un nodo worker da 26 GB corrisponde a 20 GB di memoria utilizzabili per l'esecuzione di contenitori YARN. Con la memoria dell'executor impostata su 4 GB, viene aggiunto 1 GB come overhead, ovvero 5 GB di contenitori YARN per ogni executor. Ciò significa che il worker può eseguire quattro container senza risorse aggiuntive rimanenti. Puoi anche moltiplicare le dimensioni dei worker. Ad esempio, se la memoria dell'executor è impostata su 4096 GB, anche un worker con 8 CPU e 52 GB di memoria funzionerebbe bene. Le VM Compute Engine limitano la quantità di memoria che possono avere in base al numero di core. Ad esempio, una VM con 4 core deve avere almeno 7,25 GB di memoria e al massimo 26 GB di memoria. Ciò significa che un executor impostato per utilizzare 1 CPU e 8 GB di memoria utilizza 2 CPU e 26 GB di memoria sulla VM. Se invece gli esecutori sono configurati per utilizzare 2 CPU e 8 GB di memoria, vengono utilizzate tutte le CPU.
Disco
Lo spazio su disco è importante per alcune pipeline, ma non per tutte. Se la pipeline non contiene operazioni di ordinamento casuale, il disco verrà utilizzato solo quando Spark esaurisce la memoria e deve trasferire i dati sul disco. Per questi tipi di pipeline, le dimensioni e il tipo di disco in genere non influiscono molto sul rendimento. Se la pipeline mescola molti dati, le prestazioni del disco faranno la differenza. Se utilizzi Dataproc, ti consigliamo di utilizzare dimensioni del disco di almeno 1 TB, poiché le prestazioni del disco aumentano con le dimensioni del disco. Per informazioni sul rendimento dei dischi, vedi Configurare i dischi per soddisfare i requisiti di rendimento.
Numero di worker
Per ridurre al minimo il tempo di esecuzione, assicurati che il cluster sia sufficientemente grande da poter eseguire il maggior numero possibile di job in parallelo. Ad esempio, se l'origine della pipeline legge i dati utilizzando 100 suddivisioni, devi assicurarti che il cluster sia abbastanza grande da eseguire 100 esecutori contemporaneamente.
Il modo più semplice per capire se il cluster è sottodimensionato è esaminare la memoria YARN pending nel tempo. Se utilizzi Dataproc, puoi trovare un grafico nella pagina dei dettagli del cluster.
Se la memoria in attesa è elevata per lunghi periodi di tempo, puoi aumentare il numero di worker per aggiungere questa ulteriore capacità al tuo cluster. Nell'esempio precedente, il cluster deve essere aumentato di circa 28 GB per garantire il raggiungimento del livello massimo di parallelismo.
Modalità di flessibilità avanzata (EFM)
La modalità EFM ti consente di specificare che solo i nodi dei worker principali siano coinvolti nell'ordinamento casuale dei dati. Poiché i worker secondari non sono più responsabili dei dati di smistamento intermedio, quando vengono rimossi da un cluster, i job Spark non presentano ritardi o errori. Poiché i worker principali non vengono mai ridotti, il cluster viene ridotto con maggiore stabilità ed efficienza. Se esegui pipeline con mescola su un cluster statico, ti consigliamo di utilizzare EFM.
Per ulteriori informazioni sulla modalità EFM, consulta Modalità di flessibilità avanzata di Dataproc.