Ich versuche gerade herauszufinden, wann Sie einen MapReduce-Job ausführen, indem Sie an bestimmten Stellen des Codes einige system.out.println () -Modelle erstellen, aber wissen, dass diese print-Anweisung auf meinem Terminal gedruckt wird, wenn der Job ausgeführt wird . Kann mir jemand helfen herauszufinden, was genau mache ich hier falsch?
%Vor% Das hängt davon ab, wie Sie Ihren Job einreichen. Ich denke, Sie reichen ihn mit bin/hadoop jar yourJar.jar
right?
Ihr System.out.println()
ist nur in Ihrer Hauptmethode verfügbar, da der Mapper / Reducer innerhalb von hadoop in einer anderen JVM ausgeführt wird, werden alle Ausgaben in spezielle Protokolldateien (out / log-Dateien) umgeleitet.
Und ich würde empfehlen, Ihr eigenes Apache-Commons-Protokoll zu verwenden:
Und deshalb einige Info-Logging:
%Vor%Wenn Sie sich im "lokalen" Modus befinden, können Sie dieses Protokoll in Ihrer Shell sehen, andernfalls wird dieses Protokoll irgendwo auf dem Rechner gespeichert, auf dem die Aufgabe ausgeführt wird. Bitte benutzen Sie die Web-UI von Jobtracker, um diese Log-Dateien zu betrachten, das ist sehr praktisch. Standardmäßig läuft der Job-Tracker auf Port 50030.
Alternativ können Sie die MultipleOutputs-Klasse verwenden und alle Ihre Protokolldaten in eine Ausgabedatei (Protokoll) umleiten.
%Vor%