Oozie:从Oozie <java>行动中启动Map-Reduce?

时间:2015-12-17 20:58:27

标签: java hadoop mapreduce oozie avro

我正在尝试使用<java>操作在Oozie工作流程中执行Map-Reduce任务。

O'Reilley的 Apache Oozie (Islam和Srinivasan 2015)指出:

  

虽然不推荐,但可以使用Java操作来运行Hadoop MapReduce作业,因为MapReduce作业毕竟只是Java程序。调用的主类可以是Hadoop MapReduce驱动程序,可以调用Hadoop API来运行MapReduce作业。在该模式下,Hadoop会根据需要生成更多的映射器和缩减器,并在集群上运行它们。

但是,我没有成功使用这种方法。

工作流程中的操作定义如下所示:

<java>
    <!-- Namenode etc. in global configuration -->
    <prepare>
      <delete path="${transformOut}" />
    </prepare>
    <configuration>
        <property>
            <name>mapreduce.job.queuename</name>
            <value>default</value>
        </property>
    </configuration>
    <main-class>package.containing.TransformTool</main-class>
    <arg>${transformIn}</arg>
    <arg>${transformOut}</arg>
    <file>${avroJar}</file>
    <file>${avroMapReduceJar}</file>
</java>

工具实现的main()实现如下所示:

public static void main(String[] args) throws Exception {
    int res = ToolRunner.run(new TransformTool(), args);
    if (res != 0) {
        throw new Exception("Error running MapReduce.");
    }
}

每次都会出现“Error MapReduce”错误导致工作流崩溃的情况; 如何获取MapReduce的输出来诊断问题?使用此Tool运行MapReduce应用程序是否有问题?我是否使用了错误的API调用?

我非常不愿意使用Oozie <map-reduce>操作,因为工作流中的每个操作都依赖于几个单独版本化的AVRO架构。

这里有什么问题?我正在使用“新”mapreduce API来完成任务。

感谢您的帮助。

0 个答案:

没有答案