在阶段1和阶段2之间运行一个非mapreduce的任务



在我的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作业之后。

希望有所帮助

相关内容

  • 没有找到相关文章

最新更新