2015-12-26 10 views
5

Per un dato lavoro MR, ho bisogno di produrre due file di output. Un file dovrebbe essere l'uscita del Mapper Un altro file dovrebbe essere l'uscita del riduttore (che è solo un'aggregazione di sopra Mapper)È possibile stampare l'output di Mapper e riduttore per un singolo lavoro in Hadoop Mapreduce

Posso avere entrambi il mapper e riduttore di uscita essere scritto in un unico lavoro?

EDIT:

In Job 1 (solo Mapper fase) di uscita contiene 20 campi in una singola riga, che deve essere scritto HDFS (file1). In Job 2 (Mapper n reducer) Mapper prende input dall'output di Job1, cancella pochi campi per portare in un formato standard (solo 10 campi) e passarlo al riduttore che scrive file2.

Ho bisogno sia di file1 che di file2 in hdf ... Ora il mio dubbio è che in Job1 il programma di scrittura possa scrivere i dati in hdf come file1, quindi modificare gli stessi dati e passarli a riduttore.

PS: A partire da ora sto utilizzando 2 lavori con meccanismo di concatenamento. Il primo lavoro contiene solo il mapper, il secondo lavoro contiene il mappatore e il riduttore.

+0

Suppongo che sia possibile utilizzare un singolo lavoro MR per produrre il risultato. Stai facendo delle trasformazioni nel Mapper del secondo lavoro, se così non fosse, quindi passa l'output di Mapper nel Riduttore in un singolo lavoro MR. – YoungHobbit

+0

I il secondo mappatore sto solo modificando il numero di colonne per una singola riga .. Ad esempio: output di mapper (file1) contiene 20 colonne, l'output di mapper2 contiene 7 colonne. Le righe duplicate da mapper2 verranno rimosse in riduttore. – Abhinay

+0

Se è possibile farlo nel primo mapper di processi, farlo lì e unire i lavori. Altrimenti, per favore informazioni dettagliate su entrambi i lavori. – YoungHobbit

risposta

2

È possibile utilizzare la classe MultipleOutputs per definire un output per il mapper e (facoltativamente) uno per il riduttore. Per il mapper, dovrai scrivere cose due volte: una volta per il file di output (usando MultipleOutputs) e una volta per l'emissione di coppie al riduttore (come al solito).

Poi, si potrebbe anche usufruire di ChainMapper di classe, per definire il seguente flusso di lavoro in un singolo processo:

Mapper 1 (file 1) -> Mapper 2 -> Reducer (file 2)

A dire il vero, non ho mai usato questa logica, ma puoi provare. In bocca al lupo!

+0

Grazie Vefthym. Non so di multipleoutput. Ho usato questo concetto. Ho usato multipleoutput in mapper, ho scritto i dati in hdfs e ho anche passato i dati come dati intermedi al riduttore. Ora sia il mio mappatore che il mio riduttore stanno scrivendo in hdf. – Abhinay

+0

@Abhinay Sono contento che abbia funzionato! – vefthym

Problemi correlati