我不想在 oozie 工作流 xml 中设置作业驱动程序配置,例如 Inputformat 映射器类等,而是想调用我的 ExampleDecision.java。 ExampleDecision 主要方法将负责作业设置和配置。怎么做?
II Java-Main Action 决策节点 插图在 OOZIE_COOK_BOOK 中
等于java ExampleDecision <strings...>
并将作业作为普通 Java 作业提交
或
它会等于Hadoop jar SomeJar.ExampleDecision <strings...>
吗?
最佳答案
是的,您可以使用 Java 很好地创建 map/reduce 代码,其中主类照常负责配置作业和作业调度。
然后您可以在 Oozie 工作流中使用 java
操作标记来调用 Jar 中的 Main 类。
这里 Main 类将调度 map/reduce 作业,这与您使用 map-reduce
标记的方法相同。
您必须断言的主要考虑是您应该只使用 Main 类中的 job.waitForCompletion(true)
语句来分派(dispatch)作业。
这样做的重要原因是在 Java 操作节点上保持 Oozie 执行,直到 Main 类调度的 map/reduce 作业完成。
编辑:-
调用hadoop jar
和调用java jar
的区别是
hadoop
命令会预先为 mapreduce 作业执行,如 JAVA_HOME、HADOOP_HOME、HADOOP_OPTS 等。 大多数情况下,您可能已经在环境变量中定义了 当您使用java
执行时,这不会导致任何问题 命令。当您使用
java
操作通过 Oozie 工作流调用 mapreduce 作业时,Oozie 将无法收集有关已分派(dispatch)的 mapreduce 作业的统计信息和计数器,因为实际的 mr 作业将从为java 操作
分派(dispatch)的容器。
因此 Oozie 执行的 Java 操作节点
将在一个单独的容器(MapTask)中运行,它只是准备作业并等待作业完成的 Driver 类,届时Oozie 工作流也会等待 java action MapTask
完成。您将能够从 Oozie -info
命令中看到生成的 mapreduce 作业的作业 ID。
希望这对您有所帮助。
关于java - Oozie 触发 MapReduce 主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32318313/