我有一个流媒体工作,我通过Oozie打电话。我能够使用映射器和减速器成功地运行此操作。但我不明白的是,我如何传递组合器。我所有的mapper, reducer和combinator都是用Python写的。这能行吗?
<map-reduce>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${HADOOP_LIB}/OutPath"/>
</prepare>
<streaming>
<mapper>python mapper.py</mapper>
<combiner>python combiner.py</combiner>
<reducer>python reducer.py</reducer>
</streaming>
<configuration>
<property>
<name>mapred.input.dir</name>
<value>${HADOOP_LIB}/input</value>
</property>
<property>
<name>mapred.output.dir</name>
<value>${HADOOP_LIB}/OutPath</value>
</property>
</configuration>
<file>mapper.py</file>
<file>combiner.py</file>
<file>reducer.py</file>
</map-reduce>
我找不到任何使用标签的地方。或者,我可以在shell脚本中使用带-combiner选项的streaming jar命令,并从Oozie调用该作业。
不,Oozie MapReduce操作的流组件目前没有组合器选项。您需要通过Oozie Shell或Java操作直接调用MR流jar,以便您可以传递组合器属性。