我正在尝试使用<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来完成任务。
感谢您的帮助。