MultipleTextOutputFormat Alternative in der neuen API

8

Wie bereits erwähnt, wurde MultipleTextOutputFormat nicht auf die neue API migriert. Wenn wir also ein Ausgabeverzeichnis auswählen und fiename basierend auf dem im laufenden Betrieb geschriebenen Schlüsselwert ausgeben müssen, welche Alternative haben wir dann mit der neuen mapreduce API?

    
Amar 26.02.2013, 22:26
quelle

3 Antworten

4
___ qstnhdr ___ MultipleTextOutputFormat Alternative in der neuen API ___ answer15102476 ___

Ähnlich wie Hadoop Reducer : Wie kann ich mit spekulativer Ausführung in mehrere Verzeichnisse ausgeben?

Grundsätzlich können Sie direkt von Ihrem Reducer aus in HDFS schreiben - Sie müssen nur auf spekulative Ausführung achten und Ihre Dateien eindeutig benennen, dann müssen Sie einen eigenen OutputCommitter implementieren, um die abgebrochenen Versuche zu bereinigen (dies ist Der schwierigste Teil, wenn Sie wirklich dynamische Ausgabeordner haben - Sie müssen durch jeden Ordner gehen und die Versuche löschen, die mit abgebrochenen / fehlgeschlagenen Aufgaben verbunden sind. Eine einfache Lösung hierfür ist das Deaktivieren der spekulativen Ausführung

    
___ tag123mapreduce ___ MapReduce ist ein Algorithmus zur Verarbeitung großer Datasets zu bestimmten Arten von verteilbaren Problemen unter Verwendung einer großen Anzahl von Knoten ___ qstntxt ___

Wie bereits erwähnt, wurde MultipleTextOutputFormat nicht auf die neue API migriert. Wenn wir also ein Ausgabeverzeichnis auswählen und fiename basierend auf dem im laufenden Betrieb geschriebenen Schlüsselwert ausgeben müssen, welche Alternative haben wir dann mit der neuen mapreduce API?

    
___ answer15104729 ___

Die beste Antwort finden Sie in Hadoop - definitive Anleitung 3. Ausgabe (ab Seite 253).

Ein Auszug aus dem HDG Buch -

"In der alten MapReduce-API gibt es zwei Klassen zum Erzeugen mehrerer Ausgaben: MultipleOutputFormat und MultipleOutputs. Kurz gesagt, MultipleOutputs ist ausführlicher, aber MultipleOutputFormat hat mehr Kontrolle über die Ausgabeverzeichnisstruktur und Dateinamen. MultipleOutputs in der Die neue API kombiniert die besten Funktionen der beiden multiplen Ausgabeklassen in der alten API. "

Es gibt ein Beispiel dafür, wie Sie die Verzeichnisstruktur, Dateibenennung und das Ausgabeformat mithilfe der MultipleOutputs-API steuern können.

HTH.

    
___ tag123hadoop ___ Hadoop ist ein Apache-Open-Source-Projekt, das Software für zuverlässiges und skalierbares verteiltes Computing bereitstellt. Das Projekt selbst enthält eine Vielzahl anderer ergänzender Ergänzungen. ___ antwort19324024 ___

Ich verwende AWS EMR Hadoop 1.0.3 und es ist möglich, verschiedene Verzeichnisse und Dateien basierend auf k / v-Paaren anzugeben. Verwenden Sie eine der folgenden Funktionen aus der Klasse MultipleOutputs :

%Vor%

oder

%Vor%

Die frühere write -Methode erfordert, dass der Schlüssel der gleiche Typ wie der Map-Ausgabeschlüssel ist (falls Sie diesen im Mapper verwenden) oder denselben Typ wie der reduce-Ausgabeschlüssel (falls Sie diesen in verwenden) der Reduzierer). Der Wert muss auch in ähnlicher Weise eingegeben werden.

Bei der letzten write -Methode müssen die Schlüssel / Wert-Typen mit den Typen übereinstimmen, die beim Einrichten der statischen MultipleObjects-Eigenschaften mit der addNamedOutput -Funktion angegeben wurden:

%Vor%

Wenn Sie also andere Ausgabetypen als% Context benötigen, müssen Sie die letztere Methode write verwenden.

Der Trick, verschiedene Ausgabeverzeichnisse zu erhalten, besteht darin, ein baseOutputPath , das ein Verzeichnistrennzeichen enthält, wie folgt zu übergeben:

%Vor%

In meinem Fall erstellte diese Dateien mit dem Namen "dir1 / part-r-00000".

Ich konnte kein baseOutputPath verwenden, das das Verzeichnis .. enthält, daher sind alle baseOutputPath s genau im Pfad enthalten, der an den Parameter -output übergeben wird.

Weitere Informationen zur Einrichtung und richtigen Verwendung von MultipleOutputs finden Sie in diesem Code, den ich gefunden habe (nicht von mir, aber ich fand es sehr hilfreich; verwendet keine anderen Ausgabeverzeichnisse). Ссылка

    
___
Eddified 11.10.2013, 17:32
quelle
0

Ähnlich wie Hadoop Reducer : Wie kann ich mit spekulativer Ausführung in mehrere Verzeichnisse ausgeben?

Grundsätzlich können Sie direkt von Ihrem Reducer aus in HDFS schreiben - Sie müssen nur auf spekulative Ausführung achten und Ihre Dateien eindeutig benennen, dann müssen Sie einen eigenen OutputCommitter implementieren, um die abgebrochenen Versuche zu bereinigen (dies ist Der schwierigste Teil, wenn Sie wirklich dynamische Ausgabeordner haben - Sie müssen durch jeden Ordner gehen und die Versuche löschen, die mit abgebrochenen / fehlgeschlagenen Aufgaben verbunden sind. Eine einfache Lösung hierfür ist das Deaktivieren der spekulativen Ausführung

    
Chris White 27.02.2013 01:12
quelle
-1

Die beste Antwort finden Sie in Hadoop - definitive Anleitung 3. Ausgabe (ab Seite 253).

Ein Auszug aus dem HDG Buch -

"In der alten MapReduce-API gibt es zwei Klassen zum Erzeugen mehrerer Ausgaben: MultipleOutputFormat und MultipleOutputs. Kurz gesagt, MultipleOutputs ist ausführlicher, aber MultipleOutputFormat hat mehr Kontrolle über die Ausgabeverzeichnisstruktur und Dateinamen. MultipleOutputs in der Die neue API kombiniert die besten Funktionen der beiden multiplen Ausgabeklassen in der alten API. "

Es gibt ein Beispiel dafür, wie Sie die Verzeichnisstruktur, Dateibenennung und das Ausgabeformat mithilfe der MultipleOutputs-API steuern können.

HTH.

    
Eswara Reddy Adapa 27.02.2013 05:19
quelle

Tags und Links