Fehler aufgrund von Speichermangel in der Mapreduce-Shuffle-Phase

Ich bekomme seltsame Fehler beim Ausführen von awordcount-like Mapreduce-Programm. Ich habe einen Hadoop-Cluster mit 20 Slaves mit jeweils 4 GB RAM. Ich habe meine Map-Tasks so konfiguriert, dass sie einen Heap von 300 MB haben, und meine Task-Slots zum Reduzieren erhalten 1 GB. Ich habe 2 Kartensteckplätze und 1 Steckplatz pro Knoten zu reduzieren. Alles läuft gut, bis die erste Runde der Kartenaufgaben abgeschlossen ist. Dann bleibt der Fortschritt bei 100%. Ich nehme dann das anKopierphase findet statt. Jede Kartenaufgabe erzeugt so etwas wie:

Map output bytes    4,164,335,564
Map output materialized bytes   608,800,675

(Ich benutze SnappyCodec für die Komprimierung)

Nach demAbwürgen Etwa eine Stunde lang sind die Reduction-Tasks mit der folgenden Ausnahme blockiert:

    Error: java.lang.OutOfMemoryError: Java heap space at  
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.shuffleInMemory(ReduceTask.java:1703) at
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getMapOutput(ReduceTask.java:1563) at
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.copyOutput(ReduceTask.java:1401) at
org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.run(ReduceTask.java:1333

Ich habe gegoogelt und diesen Link gefunden, aber ich weiß nicht wirklich, was ich daraus machen soll:HADOOP gemeinsamen Link

Ich verstehe nicht, warum bei hadoop Probleme beim Kopieren und Zusammenführen auftreten, wenn ein Terasort-Benchmark durchgeführt werden kann. Es kann nicht sein, dass alle Kartenausgaben in den RAM des Reduzierthreads passen. Also, was ist hier los?

In dem oben angegebenen Link wird die Optimierung der folgenden Parameter erläutert:

mapreduce.reduce.shuffle.input.buffer.percent = 0.7
mapreduce.reduce.shuffle.memory.limit.percent = 0.25
mapreduce.reduce.shuffle.parallelcopies = 5

Sie behaupten, dass die Tatsache, dass das Produkt der Parameter> 1 ist, berücksichtigtHeapsize-Fehler. BEARBEITEN: Beachten Sie, dass 5 * 1,25 * 0,7 immer noch <1 ist, also konzentrieren Sie sich auf meinen zweiten Lösungsbeitrag!) Vor dem Neustart dieser intensiven Simulation würde ich mich sehr über die Meinung von jemandem zu meinem Problem freuen, da es fast ein Problem darstellt Woche jetzt. Ich scheine auch nicht ganz zu verstehen, was in dieser Kopierphase vor sich geht. Würde eine Zusammenführungssorte auf der Festplatte nicht viel Heap-Größe erfordern?

Danke vielmals im Voraus für hilfreiche Kommentare und Antworten!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage