Spark scheitert bei großen Shuffle-Jobs mit java.io.IOException: Dateisystem geschlossen

8

Ich finde oft, dass Funken bei großen Jobs mit einer ziemlich sinnlosen Ausnahme versagen. Die Worker-Protokolle sehen normal aus, keine Fehler, aber sie erhalten den Status "KILLED". Dies ist sehr häufig bei großen Shuffles, so Operationen wie .distinct .

Die Frage ist, wie kann ich diagnostizieren, was schief läuft, und im Idealfall, wie repariere ich es?

Da viele dieser Operationen monoidal sind, habe ich das Problem bereits gelöst, indem ich die Daten z. B. in 10 Teile aufteilte, die App auf jedem Chunk ausführte und dann die App auf allen resultierenden Ausgaben ausführte. Mit anderen Worten - Meta-Map-Reduce.

%Vor%     
samthebest 04.06.2014, 13:34
quelle

3 Antworten

4

Seit dem 1. September 2014 ist dies eine "offene Verbesserung" in Spark. Bitte beachten Sie Ссылка . Wie syrza in der gegebenen Verbindung darauf hingewiesen hat, werden die Shutdown-Hooks wahrscheinlich in der falschen Reihenfolge ausgeführt, wenn ein Executor fehlgeschlagen ist, was zu dieser Nachricht führt. Ich verstehe, dass Sie etwas mehr Nachforschungen anstellen müssen, um die Hauptursache für das Problem herauszufinden (d. H. Warum Ihr Executor gescheitert ist). Wenn es sich um ein großes Shuffle handelt, kann es sich um einen Fehler aufgrund unzureichenden Arbeitsspeichers handeln, der einen Executor-Fehler verursacht, der dazu führte, dass das Hadoop-Dateisystem in seinem Shutdown-Hook geschlossen wurde. Daher werfen die RecordReader, die Tasks dieses Executors ausführen, die Ausnahme "java.io.IOException: Dateisystem geschlossen". Ich denke, es wird in der nächsten Version behoben werden und dann erhalten Sie hilfreichere Fehlermeldung:)

    
Niketan 02.09.2014, 00:10
quelle
1

Etwas ruft DFSClient.close() oder DFSClient.abort() , Schließen des Clients. Die nächste Dateioperation führt dann zu der obigen Ausnahme.

Ich würde versuchen herauszufinden, was close() / abort() aufruft. Sie können einen Haltepunkt in Ihrem Debugger verwenden oder den Hadoop-Quellcode so ändern, dass in diesen Methoden eine Ausnahme ausgelöst wird, sodass Sie einen Stack-Trace erhalten.

    
Daniel Darabos 05.06.2014 19:33
quelle
0

Die Ausnahme "Dateisystem geschlossen" kann gelöst werden, wenn der Spark-Job auf einem Cluster ausgeführt wird. Sie können Eigenschaften wie spark.executor.cores, spark.driver.cores und spark.akka.threads auf die maximalen Werte Ihrer Ressourcenverfügbarkeit setzen. Ich hatte das gleiche Problem, als meine Datenmenge mit JSON-Daten über 20 Millionen Datensätze ziemlich groß war. Ich reparierte es mit den oben genannten Eigenschaften und es lief wie ein Charme. In meinem Fall habe ich diese Eigenschaften auf 25,25 bzw. 20 gesetzt. Hoffe es hilft !!

Referenzlink:

Ссылка

    
N.C 29.02.2016 02:50
quelle

Tags und Links