2011-12-22 8 views
7

Sto cercando di scoprire dove viene salvato l'output di un'attività Mappa su disco prima che possa essere utilizzato da un'attività Riduci.In Hadoop, dove il framework salva l'output dell'attività della mappa in una normale applicazione di riduzione della mappa?

Nota: - versione utilizzata è Hadoop 0.20.204 con la nuova API

Ad esempio, quando sovrascrivendo il metodo map nella classe Map:

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. 

} 

Sono interessato a scoprire dove fa context.write() finisce per scrivere i dati. Finora ho incontrato il:

FileOutputFormat.getWorkOutputPath(context); 

che mi dà il seguente percorso sul HDFS:

hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0 

Quando provo a usarlo come input per un altro lavoro che mi dà il seguente errore:

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 

Nota: il lavoro viene avviato nel Mapper, quindi tecnicamente, la cartella temporanea in cui il compito Mapper sta scrivendo E 'esiste uscita quando il NE Il lavoro inizia. Poi di nuovo, dice ancora che il percorso di input non esiste.

Qualche idea su dove viene scritta l'uscita temporanea? O forse qual è il luogo in cui posso trovare l'output di un'attività Mappa durante un lavoro che ha sia una fase Mappa che una fase Riduci?

+0

BTW, sembra FileOutputhFormat # getWorkOutputPath fornisce il percorso della cartella di output temporanea per il lavoro e non per l'attività della mappa come da documentazione api. 'Quando provo ad usarlo come input per un altro lavoro, mi dà il seguente errore:' - di solito i file temporanei vengono cancellati una volta completato il lavoro o altrimenti il ​​nodo si riempie facilmente. –

+0

OK, equo punto, ma sto avviando il lavoro mentre l'altro lavoro è in esecuzione. Riduco la mappa nidificata. Quindi, il lavoro esterno è occupato-in attesa mentre il lavoro interno è in esecuzione, quindi non ci dovrebbe essere alcuna cancellazione di file temporanei. – inquire

+0

Ma ok, le cose giuste vengono cancellate, il che significa che erano da qualche parte prima che venissero cancellate. Devo scoprire dov'è. : D – inquire

risposta

3

Quindi, ho capito cosa sta veramente succedendo.

L'output del mapper viene memorizzato nel buffer fino a circa l'80% della sua dimensione e, a quel punto, inizia a scaricare il risultato sul suo disco locale e continua ad ammettere gli elementi nel buffer.

Volevo ottenere l'output intermedio del mapper e usarlo come input per un altro lavoro, mentre il mapper era ancora in esecuzione. Si scopre che questo non è possibile senza modificare pesantemente la distribuzione di hadoop 0.20.204. Il modo in cui funziona il sistema è ancora più dopo tutte le cose che sono specificate nel contesto mappa:

map .... { 
    setup(context) 
    . 
    . 
    cleanup(context) 
} 

e la pulizia è chiamato, non v'è ancora alcun dumping nella cartella temporanea.

Dopo, l'intero calcolo della mappa finisce per essere unito e scaricato su disco e diventa l'input per le fasi di mescolamento e ordinamento che precedono il riduttore.

Così lontano da tutto quello che ho letto e guardato, la cartella temporanea in cui l'output dovrebbe essere alla fine, è quella che stavo indovinando in anticipo.

FileOutputFormat.getWorkOutputPath(context) 

Sono riuscito a quello che volevo fare in un modo diverso. In ogni caso qualsiasi domanda ci potrebbe essere su questo, fammi sapere.

2

Task tracker avvia un processo JVM separato per ogni attività Mappa o Riduci.

L'output del mapper (dati intermedi) viene scritto nel file system locale (NON HDFS) di ciascun nodo slave del mapper. Una volta trasferiti i dati su Reducer, non saremo in grado di accedere a questi file temporanei.

Se si desidera vedere l'output del Mapper, suggerisco di utilizzare IdentityReducer?

4

La mappa di ridimensionamento della mappa memorizzerà l'output intermedio nel disco locale piuttosto che in HDFS poiché ciò causerebbe la replicazione inutile dei file.

Problemi correlati