Как правильно использовать oozie для записи в несколько выходных потоков для задания mapreduce? - PullRequest
5 голосов
/ 21 марта 2012

Я использую новый Hadoop API для написания последовательности заданий уменьшения карты. Я планирую использовать Oozie для конвейерной передачи всего этого вместе, но я не могу найти способ сделать несколько выходных потоков из узла map-reduce в рабочем процессе.

Обычно для записи нескольких выходов я использовал бы код, аналогичный коду, приведенному в javadoc MultipleOutputs *1007*, но oozie получает всю свою конфигурацию из файла workflow.xml, поэтому именованные выходы не могут быть настроены так, как они есть в пример.

Я сталкивался с потоком , в котором обсуждалось использование нескольких выходов в Oozie, но не было представлено никакого решения, кроме создания задачи Java и добавления ее непосредственно в конвейер Oozie.

Есть ли способ сделать это через map-reduce узел в workflow.xml?

Edit:

Решение Криса сработало, хотя хотелось бы, чтобы был лучший способ. Вот точные изменения, которые я сделал.

Я добавил следующее в файл 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>

Я добавил следующее в файл job.properties, который загружается в oozie при запуске:

output1=totals
output2=uniques

Затем в редукторе я написал на названные выходы totals и uniques.

Ответы [ 2 ]

3 голосов
/ 15 мая 2014

Начиная с Hadoop 2.x имена свойств изменились с mapreduce.multipleoutputs. * На mo. *, Поэтому новые свойства конфигурации теперь будут выглядеть так:

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

Протестировано и проверено на Hadoop 2.4.x, Ooize 4.0.0

3 голосов
/ 21 марта 2012

служебные методы addNamedOutput для MultipleOutputs просто настраивают свойства конфигурации - так что посмотрите на экземпляр вашей работы, который был запущен, и извлеките свойства для MultipleOutputs (посмотрите в job.xml, выстроенном на странице JobTracker).

Кроме того, просмотрите источник для MultipleOutputs и посмотрите, какие свойства конфигурации устанавливаются при вызове этого метода.

Как только вы узнаете, какие свойства установлены, добавьте их в раздел конфигурации карты-снизить элемент в рабочем процессе Oozie.

...