Was ist der Zweck der Funktion org.apache.hadoop.mapreduce.Mapper.run () in Hadoop?

8

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.

    
Praveen Sripati 18.09.2011, 06:00
quelle

3 Antworten

10

Die Standardmethode run() verwendet einfach jedes vom Kontext bereitgestellte Schlüssel / Wert-Paar und ruft die Methode map() auf:

%Vor%

Wenn Sie mehr als das tun wollten ... müssten Sie es überschreiben. Zum Beispiel der MultithreadedMapper Klasse

    
Brian Roach 18.09.2011, 06:18
quelle
1

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.

    
Andy Lowry 27.03.2014 15:14
quelle
0

Vielleicht könnte es auch für Debugging-Zwecke verwendet werden. Sie können dann einen Teil der eingegebenen Schlüssel / Wert-Paare überspringen (= ein Beispiel nehmen), um Ihren Code zu testen.

    
DDW 28.08.2013 09:34
quelle

Tags und Links