在我的mapReduce代码中,我需要一个不并行的任务在第1阶段运行reducer后运行。这个任务需要阶段1的减速机输出。然后我想在第二阶段的映射器和reducer中使用这个任务的输出。因为这个任务不是并行任务,所以我不需要为它编写MapReduce代码。我应该在代码的哪一部分编写它的代码?
如果我没理解错的话,你有两个独立的mapreduce任务?一个是第一阶段,第二个是第二阶段?对于这种情况,非常简单的解决方案是使用Oozie工作流。我使用类似的工作流程来查询外部api(没有并行运行):
<workflow-app name="TEST" xmlns="uri:oozie:workflow:0.4">
<start to="Test"/>
<action name="Test">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<main-class>com.test.Test</main-class>
<java-opts>-Xms128M -Xmx2048M</java-opts>
<arg>-d</arg>
<arg>${Date_Valid}</arg>
<file>/lib/api2.jar</file>
</java>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
把stage1放到java作业之前,stage2放到java作业之后。
希望有所帮助