Effetti OOM
Quando le VM di Dataproc su Compute Engine riscontrano errori di esaurimento della memoria:
Le VM master e worker si bloccano per un determinato periodo di tempo.
Gli errori OOM delle VM master causano la mancata riuscita dei job con l'errore "Attività non acquisita".
Gli errori OOM della VM worker causano una perdita del nodo su YARN HDFS, con un conseguente ritardo nell'esecuzione del job Dataproc.
Controlli di memoria
Yarn offre tre tipi di controlli della memoria:
- Basata su polling (legacy)
- Restrittiva
- Elastic
Per impostazione predefinita, Dataproc non imposta yarn.nodemanager.resource.memory.enabled
su
per abilitare i controlli della memoria YARN, per i seguenti motivi:
- Un controllo rigoroso della memoria può causare la terminazione dei container quando è disponibile memoria sufficiente se le dimensioni dei container non sono configurate correttamente.
- I requisiti di controllo della memoria elastica possono influire negativamente sull'esecuzione del job.
- I controlli della memoria YARN possono non riuscire a prevenire gli errori OOM quando i processi consumano memoria in modo aggressivo.
Protezione della memoria Dataproc
Quando la VM di un cluster Dataproc è sotto pressione, la protezione della memoria di Dataproc termina i processi o i container fino a quando la condizione OOM non viene rimossa.
La protezione della memoria di Dataproc è fornita per i seguenti nodi cluster nelle seguenti versioni immagine di Dataproc su Compute Engine:
Ruolo | 1.5 | 2.0 | 2.1 |
---|---|---|---|
VM master | 1.5.74+ | 2.0.48+ | tutte |
VM worker | Non disponibile | 2.0.76+ | 2.1.24+ |
VM del pool di driver | Non disponibile | 2.0.76+ | 2.1.24+ |
Come identificare le terminazioni della protezione della memoria di Dataproc
- Processi che la protezione della memoria di Dataproc termina l'uscita con il codice
137
o143
. - Terminazione del nodo worker:
- Dataproc incrementa la metrica cumulativa
dataproc.googleapis.com/node/problem_count
e impostareason
suProcessKilledDueToMemoryPressure
. - Se Cloud Logging è abilitato, Dataproc scrive un log
google.dataproc.oom-killer
con il messaggio "Un processo è stato interrotto a causa della pressione della memoria: [nome del processo]". - Se un container YARN viene terminato, Dataproc scrive il seguente messaggio in Resource Manager YARN: "[ID container] è uscito con il codice 137, il che potenzialmente indica una pressione della memoria su [node id]".
- Dataproc incrementa la metrica cumulativa
- Terminazione del nodo del pool di driver o master: il driver del job ha esito negativo con
Driver received SIGTERM/SIGKILL signal and exited with [INT] code
.
Soluzioni OOM
Questa sezione offre suggerimenti per le terminazioni di job e container che possono essere causate da problemi OOM.
Il job non funziona con il messaggio "Il conducente ha ricevuto il segnale SIGTERM/SIGKILL ed è uscito con il codice [INT]"
Consigli:
- Se i cluster hanno un pool di driver, aumenta
driver-required-memory-mb
fino all'utilizzo della memoria del job attuale. - Se il cluster non ha un pool di driver, ricrealo, riducendo il numero massimo di job simultanei, calcolato come
(total master memory in MB - 3584MB) / driver-size-mb
. Puoi ridurre questo numero di:- Impostazione di
dataproc:dataproc.scheduler.max-concurrent-jobs
o - Imposto
dataproc:dataproc.scheduler.driver-size-mb
su un numero maggiore (il valore predefinito è1024MB
).
- Impostazione di
- Valuta l'utilizzo di un tipo di macchina del nodo master con memoria aggiuntiva.
Contenitore uscito con il codice di uscita 137 o 143
Consigli:
Se la protezione della memoria di Dataproc ha terminato il container (vedi Come identificare le terminazioni della protezione della memoria di Dataproc):
- Verifica che le dimensioni del contenitore siano configurate correttamente.
- Valuta la possibilità di ridurre
yarn.nodemanager.resource.memory-mb
. Questa proprietà controlla la quantità di memoria utilizzata per pianificare i container YARN. - Se i container di job non riescono ad andare a buon fine, verifica se il disallineamento dei dati sta causando un maggiore utilizzo di container specifici. In tal caso, ripartiziona il job o aumenta la dimensione del worker per soddisfare requisiti di memoria aggiuntivi.