2009-05-20 10 views
6

C'è un modo per controllare i nomi dei file di uscita di un lavoro Hadoop Streaming? In particolare mi piacerebbe che il contenuto del file di output del mio lavoro e il nome fossero organizzati dal ket, le uscite del riduttore - ogni file conterrebbe solo valori per una chiave e il suo nome sarebbe la chiave.Come controllo il nome dei file di output e il contenuto di un lavoro di streaming Hadoop?

Aggiornamento: Appena trovato la risposta - Utilizzo di una classe Java che deriva da MultipleOutputFormat poiché il formato di output dei lavori consente il controllo dei nomi dei file di output. http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

Non ho visto i campioni di questo là fuori ... Chiunque può segnalare a un campione di Hadoop in streaming che fa uso di un formato di output personalizzato classe Java?

risposta

8

Utilizzo di una classe Java che deriva da MultipleOutputFormat poiché il formato di output dei lavori consente il controllo dei nomi dei file di output. http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

Quando si utilizza Hadoop in streaming, dal momento che solo un JAR è supportato in realtà si deve sborsare il vaso streaming e mettere le nuove classi formato di output in esso per lo streaming di posti di lavoro per essere in grado di fare riferimento a esso ...

EDIT: a partire dalla versione 0.20.2 di Hadoop questa classe è stato deprecato e ora si dovrebbe usare: http://hadoop.apache.org/docs/mapreduce/current/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html

+1

Collegamento interrotto a nuovi documenti –

-1

In generale, Hadoop considera l'intera directory come l'output e non un singolo file. Non c'è modo di controllare direttamente il nome del file, che si tratti di Streaming o di normali lavori Java.

Tuttavia, nulla ti impedisce di farlo dividere e rinominare te stesso, al termine del lavoro. Puoi $ HADOOP dfs -cat path/to/your/output/directory/part- * e condurlo a uno script che divide il contenuto per chiavi e lo scrive in nuovi file.

+0

In questo è generale, non l'approccio che si vuole prendere. –