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
.
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