【问题标题】:How can I run a hadoop example jar in an oozie workflow?如何在 oozie 工作流程中运行 hadoop 示例 jar?
【发布时间】:2018-02-16 01:04:55
【问题描述】:

这让我发疯了——我觉得自己像个白痴,想知道怎么做!

我正在构建一个使用 Oozie 客户端库来运行工作流的应用程序。真的很简单,我想为我的代码构建一些测试,这样我就可以检查我是否在做正确的事情,实际代码 - 感谢 oozie 客户端库 - 非常简单。

我已经安装了 Hadoop,并且可以运行标准 wordcount 提供的示例,没有任何问题,但我不知道如何通过 Oozie 运行东西,它让我发疯。

所以我想我会作弊并问一些会知道的人(蠕变)。

如何转换:

bin/hadoop jar hadoop*examples*.jar wordcount input/somedata output

到 Oozie 工作流程?

我假设它是一个 Java 操作,但我就是不知道要在工作流 xml 中填写什么!

请帮忙 - 工作流程是什么样的,我将如何在命令行上运行它。

非常感谢。

【问题讨论】:

    标签: unit-testing hadoop


    【解决方案1】:

    要运行 Oozie 作业,您需要 workflow.xml 和属性文件。
    要运行 Basic WordCount Program,您的 workflow.xml 将是这样的。

    <workflow-app xmlns="uri:oozie:workflow:0.1" name="WorkflowRunnerTest">
    
      <start to="intersection0"/>
    
      <action name="intersection0">
        <map-reduce>
          <job-tracker>localhost:54101</job-tracker>
          <name-node>hdfs://localhost:54100</name-node>
    
          <prepare>
            <delete path="hdfs://localhost:54100/user/user1/out1"/>
          </prepare>
    
          <configuration>
            <property> 
              <name>mapred.job.queue.name</name>
              <value>default</value>
            </property>
            <property>
              <name>mapred.mapper.class</name>
              <value>MapperClass</value>
            </property>
            <property>
              <name>mapred.reducer.class</name>
              <value>ReducerClass</value>
            </property>
            <property>
              <name>mapred.output.key.class</name>
              <value>org.apache.hadoop.io.Text</value>
            </property>
            <property>
              <name>mapred.output.value.class</name>
              <value>org.apache.hadoop.io.IntWritable</value>
            </property>
            <property>
              <name>mapred.input.dir</name>
              <value>/user/user1/inp</value>
            </property>
            <property>
              <name>mapred.output.dir</name>
              <value>/user/user1/out1</value>
            </property>
          </configuration>
        </map-reduce>
    
        <ok to="end"/>
        <error to="fail"/>
      </action>
    
      <kill name="fail">
        <message>Map/Reduce failed, error message</message>
      </kill>
      <end name="end"/>
    
    </workflow-app>
    


    job.propertis 文件将是
    oozie.wf.application.path=hdfs://localhost:54100/user/user1/oozie/workflow-apps/sample-mr



    workflow.xml 必须存在于 hdfs://localhost:54100/user/user1/oozie/workflow-apps/sample-mr 并复制 jar将包含必要类的文件放入路径 hdfs://localhost:54100/user/user1/oozie/workflow-apps/sample-mr/lib 。


    Oozie 作业可以从命令行运行由

    oozie job -oozie http://localhost:8080/oozie -config map-reduce-job.properties -run

    【讨论】:

    • 谢谢,这行得通!是否有明确的方法来指定 jar 文件而不是复制到 ${oozie.wf.application.path}/lib/ ? (或)我如何为 2 个不同的工作流程使用相同的 JAR 文件而不在 HDFS 中复制它?
    • @ThammeGowda ${oozie.wf.application.path}/lib/ 实际上可以是通用路径。相同的路径可用于两个工作流程,因此您不必复制 jars。例如 hdfs://localhost:54100/user/user1/oozie/lib 可以是所有 jars 的共享位置。此路径将设置为 oozie 作业的 oozie.libpath。
    猜你喜欢
    • 2017-07-17
    • 2014-06-17
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    相关资源
    最近更新 更多