Oozie:从Oozie <java>操作启动Map-Reduce?

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

O'Reilley的Apache Oozie (伊斯兰和斯里尼瓦桑2015)指出:

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

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

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

 <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."); } } 

上面的工作stream程每次都会出现“Error running MapReduce”exception。 我如何获得MapReduce的输出来诊断问题? 使用此Tool运行MapReduce应用程序有问题吗? 我是否使用错误的API调用?

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

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

感谢您的帮助。

>我如何得到MapReduce的输出…

回到基础。

由于您不在乎提及哪个版本的Hadoop以及您正在使用哪个版本的Oozie,因此我将假定“最近”设置(例如Hadoop 2.7 w / TimelineServer和Oozie 4.2)。 而且由于你没有提到你使用的是哪一种接口(命令行本地Oozie / Yarn UI?色调?),我将举几个例子,使用good'old'CLI。

> oozie jobs -localtime -len 10 -filter name=CrazyExperiment

显示“CrazyExperiment”工作stream程的最后10次执行,以便您可以在下一个命令中注入相应的“作业ID”。

> oozie job -info 0000005-151217173344062-oozie-oozi-W

从Oozie的angular度显示执行的状态。 如果你的Java动作卡在PREP模式,那么Oozie没有提交给YARN; 否则你会在“外部ID”下find类似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日志包含了一大堆Ooziedebugging的东西,真正的stdout在最底层。

如果你的Java动作成功产生了另外一个YARN作业,并且你仔细地显示了子应用程序的ID,那么你应该能够在那里检索它并且运行另一个yarn logs命令。

享受你的未来5天的debugging;-)