col*_*red 5 java hadoop mapreduce oozie
我正在使用新的Hadoop API编写一系列map-reduce作业.我打算使用Oozie的管线所有的这些结合在一起,但我似乎无法找到一种方法,从做多输出流,map-reduce工作流中的节点.
通常情况下写的多路输出,我会用类似在给定的代码代码MultipleOutputs的javadoc,但Oozie的会从它的所有配置workflow.xml文件,因此命名为输出不能被配置成类似于他们在例子.
我遇到一个线程讨论使用在Oozie的多路输出,但没有提出超出了创建一个Java的任务,它直接增加了Oozie的pipline解决方案.
有没有办法通过这个map-reduce节点workflow.xml?
编辑:
克里斯的解决方案确实有效,但我希望有更好的方法.以下是我所做的确切更改.
我将以下内容添加到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>
Run Code Online (Sandbox Code Playgroud)
我将以下内容添加到job.properties文件中,该文件在启动时被提供给oozie:
output1=totals
output2=uniques
Run Code Online (Sandbox Code Playgroud)
然后在reducer中我写了命名输出totals和uniques.
MultipleOutputs 的实用addNamedOutput方法只是配置配置属性 - 因此请查看已运行的作业实例并提取 MultipleOutputs 的属性(查看 JobTracker 页面中的 job.xml)。
或者,查看 MultipleOutputs 的源代码并查看调用此方法时正在设置哪些配置属性。
了解要设置的属性后,将它们添加到 Oozie 工作流程中的 map-reduce 元素的配置部分。
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |