In Hadoop-wo kommt das framework speichern Sie die Ausgabe der Map-Aufgabe in eine normalen-Map-Reduce-Anwendung?
Ich versuche, herauszufinden, wo kommt die Ausgabe einer Map-Aufgabe auf der Festplatte gespeichert werden, bevor es verwendet werden kann, durch eine Verringerung Aufgabe.
Hinweis: - version verwendet wird, ist Hadoop 0.20.204 mit der neuen API
Beispielsweise beim überschreiben der Methode map in der Map-Klasse:
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
//code that starts a new Job.
}
Ich bin daran interessiert zu erfahren, wo kommt der Zusammenhang.write() endet das schreiben der Daten. Bisher habe ich lief in die:
FileOutputFormat.getWorkOutputPath(context);
Die gibt mir die folgende Stelle auf hdfs:
hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0
Wenn ich versuche, es zu benutzen als Eingabe für einen anderen job, es gibt mir die folgende Fehlermeldung:
org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0
Hinweis: der job gestartet wird in der Mapper, also technisch ist der temporäre Ordner, in denen die Mapper Aufgabe ist es zu schreiben ' s Ausgabe vorliegt, wenn der neue job beginnt. Dann wieder, er sagt immer noch, dass die input-Pfad nicht vorhanden ist.
Irgendwelche Ideen auf, wo die temporären Ausgabedatei? Oder vielleicht, was ist der Ort, wo ich finden kann, die Ausgabe einer Map-Aufgabe in einem job, der beides hat, eine Karte und ein Reduzieren der Bühne?
- BTW, sieht aus wie FileOutputhFormat#getWorkOutputPath gibt den Speicherort des temporären Ausgabe-Ordner für die Arbeit und nicht für die map-Aufgabe gemäß der api-Dokumentation.
When i try to use it as input for another job it gives me the following error:
- in der Regel temporäre Dateien werden gelöscht, sobald der Auftrag abgeschlossen ist oder sonst die Knoten würde man voll leicht. - OK, fairer Punkt, aber ich fange den job, während der andere job ausgeführt wird. Ich mache geschachtelte Karte reduzieren. So, die outerjob ist busy-waiting, während der innere Auftrag ist ausgeführt, so sollte es keine Löschung der temporären Dateien.
- Aber ok, fair genug, die Dinge gelöscht, das heißt, Sie waren irgendwo, bevor Sie gelöscht wurden. Ich brauche, um herauszufinden, wo das ist. 😀
- Es ist nicht eine gute Praxis hängt die temporären Dateien, da Sie geändert werden können, zwischen den einzelnen Versionen ohne änderung der API.
- Ich Stimme mit Ihnen, aber dann wieder, ich brauche den Ausgang, und ich weiß nicht, wie um es zu bekommen. Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Karte reduzieren framework speichert intermediate output in lokale Festplatte anstatt HDFS als würde dies verursachen unnötig Replikation von Dateien.
So, ich habe herausgefunden, was wirklich Los ist.
Den output der mapper ist gepuffert, bis es zu über 80% seiner Größe, und an diesem Punkt beginnt es zu dump das Ergebnis für Ihre lokale Festplatte, und weiter zugeben Elemente in den Puffer.
Wollte ich den intermediate output der mapper als Eingabe für einen anderen job, während die mapper noch ausgeführt wurde. Es stellt sich heraus, dass dies nicht möglich ist, ohne zu stark ändern das hadoop 0.20.204 Bereitstellung. Die Art, wie das system funktioniert, ist auch nach all die Dinge, die angegeben sind in der Karte Kontext:
und cleanup aufgerufen wird, gibt es noch keine dumping in den temporären Ordner.
Nachdem die ganze Karte Berechnung alles bekommt schließlich zusammengeführt und kippte auf die Festplatte und wird zur Eingabe für das Mischen und Sortieren von Bühnen, die vor den Reducer.
Bisher von allen die ich gelesen habe und sah, den temporären Ordner, wo der Ausgang sein sollte, schließlich ist das eine, ich war zu raten, vorher.
Konnte ich das, was ich tun wollte, in einer anderen Weise. Trotzdem
alle Fragen, die es vielleicht sein könnten, lassen Sie es mich wissen.
Task tracker startet einen separaten JVM-Prozess für jede Karte oder Aufgabe Reduzieren.
Mapper-Ausgabe (intermediate data) geschrieben, um die Lokalen Dateisystem (NICHT auf) jeder mapper slave-Knoten. Sobald Daten übertragen Reducer, werden Wir nicht in der Lage sein, Zugriff auf temporäre Dateien.
Wenn Sie, um zu sehen, was die Mapper-Ausgabe, schlage ich vor, mit
IdentityReducer
?