2016-10-12 2 views
-1

Ich verwende BufferedWriter, um meinen Inhalt in eine Datei zu schreiben. [Eigentlich Datei ist HDFS. Ich schreibe über Minderer]BufferedWriter verursacht Speicherüberschreitung Ausnahme

FileSystem fs = FileSystem.get(new Configuration()); 
    Path path = new Path("temp.txt");  
    OutputStream os = fs.create(path); 
    bufferedWriter = new BufferedWriter(new OutputStreamWriter(os)); 

Dies ist, wie ich BufferedWriter bin die Schaffung [SetUp Methode des Reduktions]

Writing Teil in der reduzieren Methode:...

try { 
     bufferedWriter.write(dt+ExporterConstants.MAP_OUTPUT_KEY_SEPERATOR+hdfsPath+ExporterConstants.MAP_OUTPUT_KEY_SEPERATOR+inputSplit+"\n"); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 

Und ich schließe diese Methode in der Reinigung Methode des Reduzierers

Meine Frage:

Ich erhalte Fehler wie container is running beyond physical memory limits. Current usage: 5.5 GB of 5.5 GB physical memory used; 8.7 GB of 11.5 GB virtual memory used. Also nehme ich an, dass ich alle Daten puffern und es nur einmal zum Zeitpunkt der nahen Methode spülen werde.

Ist das Problem verursacht? Und wie spüle ich effizient?

Und ich bin offen für andere Autoren auch zu verwenden. Irgendwelche Vorschläge?

Antwort

0

Es klingt, als wäre die Größe des Heapspeichers zu groß für den Speicher, den Sie ihm gegeben haben. Die JVM kann die maximale Größe des Heapspeichers verwenden, um Ihr Programm schneller ausführen zu lassen, nicht nur aufgrund von beibehaltenen Daten.

Versuchen Sie, den Speicherverbrauch der JVM zu reduzieren. Wenn Sie es für die Daten zu niedrig machen, erhält es einen OutOfMemoryError.

+0

@GopsAB was sind deine Zweifel? Ich kann mir keinen einfacheren Weg vorstellen, es tut mir leid. –

Verwandte Themen