Ich bin neu in hadoop und ich arbeite mit einer großen Anzahl von kleinen Dateien in Wordcount Beispiel. Es benötigt eine Menge Map-Aufgaben und führt zu einer Verlangsamung meiner Ausführung.
Wie kann ich die Anzahl der Kartenaufgaben reduzieren?
Wenn die beste Lösung für mein Problem kleine Dateien zu einer größeren Datei cattiert, wie kann ich sie katzen?
Wenn Sie etwas wie TextInputFormat
verwenden, besteht das Problem darin, dass jede Datei mindestens eine Teilung hat, so dass die obere Grenze der Anzahl der Karten die Anzahl der Dateien ist, was in Ihrem Fall sehr viele sind kleine Dateien werden Sie mit vielen Mappern enden, die nur sehr wenige Daten verarbeiten.
Um hier Abhilfe zu schaffen, sollten Sie CombineFileInputFormat
verwenden, das mehrere Dateien in den gleichen Split packt (ich denke bis zur Blockgröße), so dass bei diesem Format die Anzahl der Mapper unabhängig von der Anzahl der Dateien ist Es hängt einfach von der Menge der Daten ab.
Sie müssen Ihr eigenes Eingabeformat erstellen, indem Sie von CombineFileInputFormt
aus erweitern. Hier finden Sie eine Implementierung hier . Sobald Sie Ihre InputFormat
definiert haben, nennen wir sie wie in der Verbindung CombinedInputFormat
, können Sie Ihrem Auftrag sagen, sie zu verwenden, indem Sie:
Cloudera hat irgendwann einen Blog zu Problemen mit kleinen Dateien veröffentlicht. Es ist ein alter Eintrag, aber die vorgeschlagene Methode gilt immer noch.
Tags und Links hadoop