Le seguenti proprietà consentono di specificare le opzioni da passare alle JVM che eseguono le attività. Questi possono essere utilizzati con -Xmx
per controllare l'heap disponibile.
Hadoop 0.x, 1.x (deprecated) Hadoop 2.x
------------------------------- --------------------------
mapred.child.java.opts
mapred.map.child.java.opts mapreduce.map.java.opts
mapred.reduce.child.java.opts mapreduce.reduce.java.opts
Nota per il primo di questi non esiste un equivalente Hadoop 2; il consiglio nel codice sorgente è di usare gli altri due. mapred.child.java.opts
è ancora supportato (ma è sovrascritto dalle altre due impostazioni più specifiche se presenti).
Complementare a questi, i seguenti consentono di limitare memoria (possibilmente virtuale) disponibile per le attività totale - tra cui heap, stack e definizioni di classe:
Hadoop 0.x, 1.x (deprecated) Hadoop 2.x
------------------------------- --------------------------
mapred.job.map.memory.mb mapreduce.map.memory.mb
mapred.job.reduce.memory.mb mapreduce.reduce.memory.mb
mi suggeriscono di impostare -Xmx
al 75% del Valori memory.mb
.
In un cluster YARN, i lavori non devono utilizzare più memoria della configurazione lato server yarn.scheduler.maximum-allocation-mb
oppure verranno eliminati.
Per controllare i valori predefiniti e la precedenza di questi, vedere JobConf
e MRJobConfig
nel codice sorgente Hadoop.
Risoluzione dei problemi
Ricordate che il vostro mapred-site.xml può fornire valori predefiniti per queste impostazioni. Questo può essere fonte di confusione, ad es. se il lavoro imposta mapred.child.java.opts
in modo programmatico, ciò non avrebbe alcun effetto se mapred-site.xml imposta mapreduce.map.java.opts
o mapreduce.reduce.java.opts
. Dovresti invece impostare queste proprietà nel tuo lavoro, per sovrascrivere mapred-site.xml. Controlla la pagina di configurazione del tuo lavoro (cerca 'xmx') per vedere quali valori sono stati applicati e da dove provengono.
ApplicationMaster memoria
In un cluster FILATO, è possibile utilizzare le seguenti due proprietà per controllare la quantità di memoria disponibile per il vostro ApplicationMaster (per contenere i dettagli di divide in ingresso, stato delle attività, ecc):
Hadoop 0.x, 1.x Hadoop 2.x
------------------------------- --------------------------
yarn.app.mapreduce.am.command-opts
yarn.app.mapreduce.am.resource.mb
Anche in questo caso, è possibile impostare -Xmx
(nella ex) al 75% del valore resource.mb
.
Altre configurazioni
Ci sono molte altre configurazioni relative ai limiti di memoria, alcuni di loro deprecato - vedere la classe JobConf
. Un utile uno:
Hadoop 0.x, 1.x (deprecated) Hadoop 2.x
------------------------------- --------------------------
mapred.job.reduce.total.mem.bytes mapreduce.reduce.memory.totalbytes
Impostare su un valore basso (10) per forzare casuale che accada su disco nel caso in cui si colpisce un OutOfMemoryError
a MapOutputCopier.shuffleInMemory
.
Questo è quello che sto cercando, grazie fratello. – Judking
Un'altra domanda, per favore, è 'mapreduce.map.memory.mb' esattamente la quantità di risorsa utilizzata dal contenitore che esegue l'attività del mappatore? – wuchang