Ich möchte wissen, ob die 'instance'-Ausgabe des OutputCollectors in der Map-Funktion verwendet wird: output.collect (Schlüssel, Wert) diese -output- die Schlüsselwertpaare irgendwo speichern? Selbst wenn es an die Reducer-Funktion gesendet wird, muss es sich um eine Zwischendatei handeln, richtig? Was sind diese Dateien? Sind sie vom Programmierer sichtbar und entschieden? Sind die OutputKeyClass und OutputValueClasses, die wir in der Hauptfunktion angeben, diese Speicherorte? [Text.class und IntWritable.class]
Ich gebe den Standardcode für das Word Count-Beispiel in MapReduce, das wir an vielen Stellen im Netz finden können.
%Vor%Die Ausgabe der Map-Funktion wird in temporären Zwischendateien gespeichert. Diese Dateien werden von Hadoop transparent behandelt. In einem normalen Szenario hat der Programmierer keinen Zugriff darauf. Wenn Sie wissen möchten, was in den einzelnen Mappern passiert, können Sie die Protokolle für den jeweiligen Job überprüfen, in denen Sie eine Protokolldatei für jede Map-Aufgabe finden.
Wenn Sie kontrollieren wollen, wo die temporären Dateien erzeugt werden und auf diese zugreifen können, müssen Sie Ihre eigene OutputCollector-Klasse erstellen, und ich weiß nicht, wie einfach das ist.
Wenn Sie sich den Quellcode ansehen wollen, können Sie ihn mit svn herunterladen. Ich denke, es ist hier verfügbar: Ссылка .
Ich glaube, sie werden an temporären Speicherorten gespeichert und sind für den Entwickler nicht verfügbar, es sei denn, Sie erstellen eine eigene Klasse, die OutputCollector
implementiert.
Ich musste einmal auf diese Dateien zugreifen und löste das Problem durch Erstellen von Nebeneffektdateien: Ссылка
Die gruppierten Zwischenausgänge werden immer in SequenceFiles gespeichert. Anwendungen können angeben, ob und wie die Zwischenausgaben komprimiert werden sollen und welche CompressionCodecs über die JobConf verwendet werden sollen.