Was ist der Zweck der Funktion org.apache.hadoop.mapreduce.Mapper.run()
in Hadoop? Der setup()
wird vor dem Aufruf von map()
aufgerufen und der clean()
wird nach dem map()
aufgerufen. Die Dokumentation für run()
sagt
Expertenbenutzer können diese Methode überschreiben, um eine umfassendere Kontrolle über die Ausführung des Mappers zu erhalten.
Ich suche den praktischen Zweck dieser Funktion.
Die Standardmethode run()
verwendet einfach jedes vom Kontext bereitgestellte Schlüssel / Wert-Paar und ruft die Methode map()
auf:
Wenn Sie mehr als das tun wollten ... müssten Sie es überschreiben. Zum Beispiel der MultithreadedMapper Klasse
Ich habe gerade einen ziemlich merkwürdigen Fall gefunden, um das zu benutzen.
Gelegentlich habe ich herausgefunden, dass ich einen Mapper haben möchte, der all seine Eingaben verbraucht, bevor er eine Ausgabe erzeugt. Ich habe es in der Vergangenheit gemacht, indem ich die Record-Schreibvorgänge in meiner Aufräumfunktion durchgeführt habe. Meine Map-Funktion gibt keine Datensätze aus, sondern liest nur die Eingabe und speichert alles, was in privaten Strukturen benötigt wird.
Es stellt sich heraus, dass dieser Ansatz gut funktioniert, es sei denn, Sie produzieren eine Menge Output. Das Beste, was ich feststellen kann, ist, dass die Überlaufeinrichtung des Mappers während der Bereinigung nicht funktioniert. Die Aufzeichnungen, die produziert werden, häufen sich immer mehr im Gedächtnis an, und wenn es zu viele von ihnen gibt, riskiert man Haufenmüdigkeit. Das ist meine Spekulation darüber, was vor sich geht - könnte falsch sein. Aber definitiv geht das Problem mit meinem neuen Ansatz weg.
Dieser neue Ansatz besteht darin, run () anstelle von cleanup () zu überschreiben. Meine einzige Änderung zum Standard run () ist, dass, nachdem der letzte Datensatz an map () übergeben wurde, ich map () noch einmal mit Null-Schlüssel und Wert anrufe. Das ist ein Signal an meine map () -Funktion, um weiter zu machen und ihre Ausgabe zu produzieren. In diesem Fall bleibt die Speicherauslastung in Ordnung, wenn die Überlaufeinrichtung noch funktionsfähig ist.