如何使用oozie.launcher.action.main.class将参数传递给Oozie动作?

时间:2013-10-08 22:32:30

标签: hadoop oozie cascading

Oozie有一个名为oozie.launcher.action.main.class的配置属性,你可以在其中为map-reduce动作(或shell动作)传递“主类”的名称,如下所示:

  <configuration>
    <property>
      <name>oozie.launcher.action.main.class</name>
      <value>com.company.MyCascadingClass</value>
    </property>
  </configuration>

但是我需要将参数传递给我的主类,并且看不到这样做的方法。有什么想法吗?

我在问,因为我正在尝试从Oozie中启动Cascading类/流程,到目前为止我尝试过的所有选项都失败了。如果有人从Oozie那里得到了Cascading的工作,请告诉我,我会发布另一个问题,特别要求。

1 个答案:

答案 0 :(得分:4)

从Oozie 3开始(尚未尝试Oozie 4),我的主要问题的答案是:你做不到。没有任何工具(奇怪的是)用于指定使用oozie.launcher.action.main.class属性定义的主类的任何参数。

@Dmitry在评论中建议只使用Oozie java动作适用于级联作业(或任何Hadoop依赖作业),因为Oozie在启动作业时将所有Hadoop jar放入类路径中。

我已经在我的博客上记录了一个从Oozie启动级联工作的工作示例:http://thornydev.blogspot.com/2013/10/launching-cascading-job-from-apache.html

这是适用于我的workflow.xml文件:

<workflow-app xmlns='uri:oozie:workflow:0.2' name='cascading-wf'>
  <start to='stage1' />
  <action name='stage1'>
    <java>
      <job-tracker>${jobTracker}</job-tracker>
      <name-node>${nameNode}</name-node>

      <configuration>
        <property>
          <name>mapred.job.queue.name</name>
          <value>${queueName}</value>
        </property>
      </configuration>

      <main-class>com.mycompany.MyCascade</main-class>
      <java-opts></java-opts>
      <arg>/user/myuser/dir1/dir2</arg>
      <arg>my-arg-2</arg>
      <arg>my-arg-3</arg>
      <file>lib/${EXEC}#${EXEC}</file> 
      <capture-output />
    </java>
    <ok to="end" />
    <error to="fail" />
  </action>

  <kill name="fail">
    <message>FAIL: Oh, the huge manatee!</message>
  </kill>

  <end name="end"/>
</workflow-app>

在workflow.xml附带的job.properties文件中,EXEC属性定义为:

EXEC=mybig-shaded-0.0.1-SNAPSHOT.jar

并将作业放入下面这两个定义文件所在的lib目录中。