2015-11-08 13 views
7

Sto tentando di eseguire i processi Spark su un cluster Dataproc, ma Spark non verrà avviato a causa di un errore di configurazione di Yarn.Allocazione memoria errata per Yarn/Spark dopo l'installazione automatica di Dataproc Cluster

Viene visualizzato il seguente errore durante l'esecuzione di "spark-shell" dalla shell (localmente sul master), nonché durante il caricamento di un lavoro tramite la GUI Web e l'utilità della riga di comando gcloud dalla macchina locale:

15/11/08 21:27:16 ERROR org.apache.spark.SparkContext: Error initializing  SparkContext. 
java.lang.IllegalArgumentException: Required executor memory (38281+2679 MB) is above the max threshold (20480 MB) of this cluster! Please increase the value of 'yarn.s 
cheduler.maximum-allocation-mb'. 

Ho provato a modificare il valore in /etc/hadoop/conf/yarn-site.xml ma non ha modificato nulla. Non penso che estrae la configurazione da quel file.

Ho provato con più combinazioni di cluster, in più siti (principalmente Europa), e ho ottenuto questo solo per funzionare con la versione a memoria ridotta (4 core, 15 GB di memoria).

I.e. questo è solo un problema sui nodi configurati per una memoria superiore a quella consentita dal filato.

risposta

7

Siamo spiacenti per questi problemi in cui ti imbatti! Sembra che questo faccia parte di un problema noto in cui determinate impostazioni di memoria vengono calcolate in base alle dimensioni della macchina master anziché alle dimensioni delle macchine worker e speriamo di risolverle presto in una prossima versione.

Esistono due soluzioni attuali:

  1. utilizzare un tipo di macchina master con la memoria sia uguale o minore rispetto tipi di macchine lavoratore.
  2. esplicitamente impostata spark.executor.memory e spark.executor.cores sia utilizzando il flag --conf se si utilizzano una connessione SSH come:

    spark-shell --conf spark.executor.memory=4g --conf spark.executor.cores=2 
    

    o se esecuzione gcloud beta dataproc, utilizzare --properties:

    gcloud beta dataproc jobs submit spark --properties spark.executor.memory=4g,spark.executor.cores=2 
    

È possibile regolare il numero di core/memoria per esecutore secondo necessità; Va bene sbagliare dalla parte degli esecutori più piccoli e lasciare che YARN impacchetta molti esecutori su ciascun lavoratore, sebbene sia possibile risparmiare un po 'di overhead per executor impostando spark.executor.memory sull'intera dimensione disponibile in ogni contenitore di YARN e spark.executor .cores a tutti i core in ogni lavoratore.

MODIFICA: A partire dal 27 gennaio, i nuovi cluster Dataproc ora verranno configurati correttamente per qualsiasi combinazione di tipi di macchine principale/operatore, come indicato nello release notes.

+0

Holy moly! La dimensione della memoria master inferiore a quella del lavoratore era probabilmente l'unica combinazione che non avevo ancora provato. Molte grazie! Ha funzionato come un fascino :) – habitats

+0

Sembra che questo cambiamento abbia introdotto un nuovo problema. Ottengo [il seguente errore] (http://i.imgur.com/5UVnFJP.png) quando si esegue questa nuova configurazione:. Il basso cluster di memoria non ha problemi con l'identico lavoro .jar-file. – habitats

+0

Devo postarlo come un nuovo problema? – habitats

Problemi correlati