2016-04-11 11 views
0

Hallo, ich bekomme den folgenden Fehler in meinem Cluster, wenn ich versuchte, ein mapreduce-Programm in hadoop auszuführen. Dieser Code funktioniert gut für Daten, die eine geringere Dateigröße hatten, aber hadoop löst den folgenden Fehler aus und ich habe genügend Platz im Cluster. Ich habe versucht, den Heapspace von Reducer von 6 gb auf 10 gb zu erhöhen und es schlägt immer noch fehl. Tag verwendetshuffle Fehler in hadoop

Bitte mir helfen, dieses Problem zu beheben

Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#7 at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134) at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:415) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) Caused by: java.lang.OutOfMemoryError: Java heap space at org.apache.hadoop.io.BoundedByteArrayOutputStream.(BoundedByteArrayOutputStream.java:56) at org.apache.hadoop.io.BoundedByteArrayOutputStream.(BoundedByteArrayOutputStream.java:46) at org.apache.hadoop.mapreduce.task.reduce.InMemoryMapOutput.(InMemoryMapOutput.java:63) at org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl.unconditionalReserve(MergeManagerImpl.java:305) at org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl.reserve(MergeManagerImpl.java:295) at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyMapOutput(Fetcher.java:514) at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:336) at org.apache.hadoop.mapreduce.task.reduce.Fetcher.run(Fetcher.java:193)

+0

Haben Sie auch den Speicher des Verdichters erhöht? mapreduce.reduce.memory.mb – kecso

+0

ja ich habe die Minderer Speicher mapreduce.reduce.memory.mb von 6Gb erhöht es – Pratik

Antwort

0

Erhöhen Sie die Größe des JVM mapreduce.[mapper/reducer].java.pts param. Ein Wert von ca. 80-85% des Reduzierer/Mapper-Speichers wird empfohlen. Hinweis: Es gibt kein direktes Hadoop 2-Äquivalent für das erste. Der Ratschlag im Quellcode besteht darin, die anderen beiden zu verwenden. mapred.child.java.opts wird weiterhin unterstützt (wird jedoch von den anderen beiden spezifischeren Einstellungen überschrieben, falls vorhanden).

+0

nur ein Tippfehler 10GB. mapreduce [Mapper/Reduktions] .java.opts -Server -Xmx { mem} m – kecso

+0

ich werde das versuchen und dich wissen lassen, ob es funktioniert – Pratik

0

Ihre Frage wäre klarer, wenn Sie die Map Reduce-Eigenschaften erwähnt haben, die Sie für die Ausführung Ihres Codes verwenden, da dies einige Erkenntnisse für die Speicherberechnung für die Shuffle-Phase liefert.

memorylimit = Laufzeit.getRuntime(). MaxMemory() * (mapreduce.reduce.shuffle.input.buffer.percent).

Der defualt Wert von mapreduce.reduce.shuffle.input.buffer.percent 0,9 und Sie können den Wert auf 0,2 für Ihre Memory verringern < 1. So Eigenschaften zu sein, Sie können, umfassen, sind:

<property> 
    <name>mapreduce.reduce.shuffle.input.buffer.percent</name> 
    <value>0.20</value> 
</property> 
<property> 
    <name>mapreduce.reduce.shuffle.parallelcopies</name> 
    <value>4</value> 
</property> 

Für weitere Informationen können Sie sich beziehen: https://issues.apache.org/jira/browse/MAPREDUCE-6447