Oozie 触发 MapReduce 主类

Posted

技术标签:

【中文标题】Oozie 触发 MapReduce 主类【英文标题】:Oozie to Trigger a MapReduce Main Class 【发布时间】:2015-08-31 19:11:58 【问题描述】:

我不想在 oozie 工作流 xml 中设置作业驱动程序配置,例如 Inputformat 映射器类等,而是要调用我的 ExampleDecision.java。 ExampleDecision 主要方法将负责作业设置和配置。该怎么做?

II Java-Main Action 决策节点会在OOZIE_COOK_BOOK 中说明 等于java ExampleDecision <strings...>并将作业作为普通的java作业提交

是否等于Hadoop jar SomeJar.ExampleDecision <strings...>

【问题讨论】:

是的。您需要定义一个 java 操作来调用您的驱动程序类。 【参考方案1】:

是的,您可以很好地使用 Java 创建一个 map/reduce 代码,其中主类照常负责配置作业和作业分派。

然后您可以在 Oozie 工作流中使用 java 操作标签来调用 Jar 中的 Main 类。

这里 Main 类将调度 map/reduce 作业,这与您使用 map-reduce 标记的方法相同。

您必须断言的主要考虑因素是您应该只使用 Main 类中的 job.waitForCompletion(true) 语句来调度作业。

这样做的重要原因是在 Java 操作节点上保持 Oozie 执行,直到 Main 类调度的 map/reduce 作业完成。

编辑:-

调用hadoop jarjava jar之间的区别将是

hadoop 命令会预先安排几个 env 属性到 mapreduce 作业执行,如 JAVA_HOME、HADOOP_HOME、HADOOP_OPTS 等。 大多数情况下,您可能已经在环境变量中定义了 当您使用java 执行时,这不会导致任何问题 命令。

当您使用 java 操作使用 Oozie 工作流调用 mapreduce 作业时,Oozie 将无法收集有关已调度 mapreduce 作业的统计信息,因为实际的 mr 作业将从为java action

所以由 Oozie 执行的Java action node 将在一个单独的容器(MapTask)中运行,该容器只是准备作业并等待作业完成的 Driver 类,届时 Oozie 工作流也将等待获取java action MapTask 完成。您将能够通过 Oozie -info 命令查看生成的 mapreduce 作业的作业 ID。

希望这会有所帮助。

【讨论】:

因此,Java Action Tag.. 将等效于 Hadoop 调用的 MR 作业,即 ~= 用法:hadoop jar [mainClass] [String Args] 不是! ~= 用法:java [mainClass] [String Args] 是的,正确的......在这种情况下,Oozie 将安排所有与环境相关的作业设置,就像 hadoop 命令所做的一样...... 警告:如果您想要父 Java 操作的特定属性(例如,比其子映射器更多的 RAM,或不同的队列),那么您必须使用 非常糟糕的文档 前缀oozie.launcher. 用于每个特定的道具。 JAVA ACTION NODE 会不会像普通的 Java 代码一样触发它,相当于 JAVA 而不是 Hadoop Jar ClassName?这个 map reduce Job 不会从单个 MapTask 中调用吗?,有没有办法访问对边缘节点的执行控制?

以上是关于Oozie 触发 MapReduce 主类的主要内容,如果未能解决你的问题,请参考以下文章

工作流引擎Oozie:workflow

Oozie shell 操作失败

OOZIE HIVE 操作 - workflow.xml 属性不会传递给子任务

如何使用 hadoop-2.2 在 oozie 中执行 mapreduce 程序

Mesos 上的 Hadoop 因“无法找到或加载主类 org.apache.hadoop.mapred.MesosExecutor”而失败

Hadoop中mapred包和mapreduce包的区别