2012-03-21 11 views
5

Sto utilizzando la nuova API Hadoop per scrivere una sequenza di lavori di riduzione della mappa. Intendo utilizzare Oozie per eseguire il pipeline di tutti questi elementi insieme, ma non riesco a trovare un modo per eseguire più flussi di output da un nodo map-reduce nel flusso di lavoro.Qual è il modo corretto di utilizzare oozie per scrivere su più flussi di output per un lavoro mapreduce?

Normalmente per scrivere più uscite avrei usato il codice simile al codice riportato nella MultipleOutputs javadoc, ma oozie ottiene tutta la sua configurazione dal file in modo workflow.xml le uscite di nome non possono essere configurati come se fossero nell'esempio.

Mi sono imbattuto in un thread discutendo l'uso di più uscite in Oozie, ma non c'era una soluzione presentata oltre la creazione di un compito Java e l'aggiunta direttamente alla pipeline Oozie.

C'è un modo per questo tramite un nodo map-reduce nello workflow.xml?

Edit:

soluzione di Chris ha funzionato, anche se mi piacerebbe che ci fosse un modo migliore. Ecco le esatte modifiche che ho apportato.

ho aggiunto il seguente al file workflow.xml:

<property> 
    <name>mapreduce.multipleoutputs</name> 
    <value>${output1} ${output2}</value> 
</property> 
<property> 
    <name>mapreduce.multipleoutputs.namedOutput.${output1}.key</name> 
    <value>org.apache.hadoop.io.Text</value> 
</property> 
<property> 
    <name>mapreduce.multipleoutputs.namedOutput.${output1}.value</name> 
    <value>org.apache.hadoop.io.LongWritable</value> 
</property> 
<property> 
    <name>mapreduce.multipleoutputs.namedOutput.${output1}.format</name> 
    <value>org.apache.hadoop.mapreduce.lib.output.TextOutputFormat</value> 
</property> 
<property> 
    <name>mapreduce.multipleoutputs.namedOutput.${output2}.key</name> 
    <value>org.apache.hadoop.io.Text</value> 
</property> 
<property> 
    <name>mapreduce.multipleoutputs.namedOutput.${output2}.value</name> 
    <value>org.apache.hadoop.io.LongWritable</value> 
</property> 
<property> 
    <name>mapreduce.multipleoutputs.namedOutput.${output2}.format</name> 
    <value>org.apache.hadoop.mapreduce.lib.output.TextOutputFormat</value> 
</property> 

ho aggiunto il seguente al file job.properties che viene inviato al oozie all'avvio:

output1=totals 
output2=uniques 

Poi nel riduttore ho scritto alle uscite denominate totals e uniques.

risposta

3

i metodi di utilità addNamedOutput per MultipleOutputs si limitano a configurare le proprietà di configurazione, quindi consultare l'istanza del lavoro che è stato eseguito ed estrarre le proprietà per MultipleOutputs (consultare job.xml, tratteggiato dalla pagina JobTracker).

In alternativa, esaminare l'origine per MultipleOutputs e vedere quali proprietà di configurazione vengono impostate quando si chiama questo metodo.

Una volta che si conoscono le proprietà impostate, aggiungerle alla sezione di configurazione dell'elemento riduttore mappa nel flusso di lavoro Oozie.

+0

Questa è una soluzione ragionevole. L'ho provato e funziona ... Pubblicherò le righe che ho aggiunto a .properties e workflow.xml in modo che la risposta sia un po 'più completa. – coltfred

2

partire Hadoop 2.X i nomi delle proprietà sono cambiati da mapreduce.multipleoutputs * a * mo, in tal modo alle nuove proprietà di configurazione sarebbe ora simile a questa:..

<property> 
    <name>mo.namedOutputs</name> 
    <value>${output1} ${output2}</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output1}.key</name> 
    <value>org.apache.hadoop.io.Text</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output1}.value</name> 
    <value>org.apache.hadoop.io.LongWritable</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output1}.format</name> 
    <value>org.apache.hadoop.mapreduce.lib.output.TextOutputFormat</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output2}.key</name> 
    <value>org.apache.hadoop.io.Text</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output2}.value</name> 
    <value>org.apache.hadoop.io.LongWritable</value> 
</property> 
<property> 
    <name>mo.namedOutput.${output2}.format</name> 
    <value>org.apache.hadoop.mapreduce.lib.output.TextOutputFormat</value> 
</property> 

testato e verificato su Hadoop 2.4 .x, Ooize 4.0.0

+0

Grazie per questo. (Io * amo * l'infinita rinomina delle proprietà di configurazione. È la migliore caratteristica.) –

Problemi correlati