我正在尝试使用 <java>
操作在Oozie工作流中执行Map-Reduce任务 .
O 'Reilley' s Apache Oozie(Islam and Srinivasan 2015)指出:
虽然不推荐,但可以使用Java操作来运行Hadoop MapReduce作业,因为MapReduce作业毕竟只是Java程序 . 调用的主类可以是Hadoop MapReduce驱动程序,可以调用Hadoop API来运行MapReduce作业 . 在该模式下,Hadoop根据需要生成更多映射器和Reducer,并在集群上运行它们 .
但是,我没有成功使用这种方法 .
工作流中的操作定义如下所示:
<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>
Tool实现的 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 running MapReduce"例外,工作流都会崩溃; how do I get the output of the MapReduce to diagnose the problem? Is there a problem with using this Tool to run a MapReduce application? 我使用了错误的API调用吗?
我非常不愿意使用Oozie <map-reduce>
操作,因为工作流中的每个操作都依赖于几个单独版本的AVRO模式 .
's the issue here? I am using the '新的' mapreduce
API用于任务 .
谢谢你的帮助 .
1 回答
> how do I get the output of the MapReduce...
回到基础 .
既然你不在乎提到你正在使用哪个版本的Hadoop和哪个版本的Oozie,我将假设一个“最近”的设置(例如Hadoop 2.7 w / TimelineServer和Oozie 4.2) . 既然你没有提到你使用哪种界面(命令行?本机Oozie / Yarn UI?Hue?),我将举几个使用good'old'CLI的例子 .
> oozie jobs -localtime -len 10 -filter name=CrazyExperiment
显示“CrazyExperiment”工作流程的最后10次执行,以便您可以在下一个命令中注入相应的“作业ID” .
> oozie job -info 0000005-151217173344062-oozie-oozi-W
从Oozie的角度显示该执行的状态 . 如果您的Java操作停留在PREP模式,那么Oozie无法将其提交给YARN;否则你会在"External ID"下找到像
job_1449681681381_5858
这样的东西 . 但要小心!job
前缀是遗留物;实际的YARN ID是application_1449681681381_5858
.> oozie job -log 0000005-151217173344062-oozie-oozi-W
显示Oozie日志,如预期的那样 .
> yarn logs -applicationId application_1449681681381_5858
在执行结束后显示AppMaster(容器#1)和Java操作启动器(容器#2)的合并日志 . Launcher的stdout日志包含一大堆Oozie调试内容,真正的stdout位于最底层 .
如果您的Java操作成功生成另一个YARN作业,并且您小心显示子项"application ID",您应该能够在那里检索它并对其运行另一个
yarn logs
命令 .享受您未来5天的调试;-)