java - Oozie 触发 MapReduce 主类

标签 java hadoop mapreduce bigdata oozie

我不想在 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/

相关文章:

java - 编辑大型 xml 文件 'on the fly'

java - Google Drive API - 创建重复文件夹

java - 常规闭包内部如何工作?

java - 使用 Java 将文件移动到 HDFS

hadoop - Map reduce 复制输出文件,以便在配置单元中放入不同的表

java - 使用 Java-Hadoop 连接器更新 MongoDB 中的现有集合

java - 如何在 Java 中与两(2)个 SwingWorker 类共享数据

sql-server - 使用 sqoop 将表从 Windows SQL Server 2012 导入到 hadoop

hadoop - 使用 Pig 在 HBase 中为列族添加可变数量的列

java - 运行hadoop jar命令时出现jSonOject错误