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?
InformationsquelleAutor inquire | 2011-12-22
Schreibe einen Kommentar