http://oozie.apache.org/docs/4.0.0/DG_Examples.html

命令行示例 - Command Line Examples

创建示例

Oozie示例被打包在Oozie发行版的 oozie-examples.tar.gz 文件中。展开这个文件将在本地文件系统中创建一个examples/目录。examples/目录必须复制到HDFS中的用户主目录:

  1. $ hadoop fs -put examples examples

注意:如果示例目录已经存在于HDFS中,则必须在再次复制之前删除它。否则可能无法复制文件。

运行示例

对于Streaming和Pig示例,必须在HDFS中安装Oozie共享库(Oozie Share Library)。
将Oozie bin/添加到环境PATH
示例假设 JobTrackerlocalhost:8021NameNodehdfs://localhost:8020 。如果实际值不同,则必须将示例目录中的作业属性文件( job.properties )编辑为正确的值。
示例应用程序位于examples/app 目录下,每个示例一个目录。该目录包含:

  • 应用程序XML文件( workflow.xml ,或 worklfow.xmlcoordinator.xml )。
  • 提交作业的 job.properties 文件。
  • 示例可能需要的 lib/ 目录中任何 *.jar JAR文件(各jar包中的类共享命名空间)。

所有示例的输入都在 examples/input-data/ 目录中。
示例在 examples/output-data/${EXAMPLE_NAME} 目录下创建输出。
注意:在提交期间(during submissions),job.properties 文件需要是本地文件,而不是HDFS路径。

如何运行一个示例应用:

  1. $ oozie job -oozie http://localhost:11000/oozie -config examples/apps/map-reduce/job.properties -run
  2. .
  3. job: 14-20090525161321-oozie-tucu

检查工作流程状态:

  1. $ oozie job -oozie http://localhost:11000/oozie -info 14-20090525161321-oozie-tucu
  2. .
  3. .----------------------------------------------------------------------------------------------------------------------------------------------------------------
  4. Workflow Name : map-reduce-wf
  5. App Path : hdfs://localhost:8020/user/tucu/examples/apps/map-reduce
  6. Status : SUCCEEDED
  7. Run : 0
  8. User : tucu
  9. Group : users
  10. Created : 2009-05-26 05:01 +0000
  11. Started : 2009-05-26 05:01 +0000
  12. Ended : 2009-05-26 05:01 +0000
  13. Actions
  14. .----------------------------------------------------------------------------------------------------------------------------------------------------------------
  15. Action Name Type Status Transition External Id External Status Error Code Start Time End Time
  16. .----------------------------------------------------------------------------------------------------------------------------------------------------------------
  17. mr-node map-reduce OK end job_200904281535_0254 SUCCEEDED - 2009-05-26 05:01 +0000 2009-05-26 05:01 +0000
  18. .----------------------------------------------------------------------------------------------------------------------------------------------------------------

要通过Oozie web控制台检查工作流作业状态,可以使用浏览器转到 “http://loaclhost:11000/oozie”
为了避免在每个Oozie命令中使用Oozie URL提供 -oozie 选项,可以在shell环境中将 OOZIE_URL 环境变量设置为Oozie URL。例如:

  1. $ export OOZIE_URL="http://localhost:11000/oozie"
  2. $
  3. $ oozie job -info 14-20090525161321-oozie-tucu

Java API的例子

Oozie提供了一个Java Client API示例,简化了Oozie与Java应用程序的集成。这个Java客户端API是一个与Oozie web服务API交互的方便API。( Java Client API 404 不存在)
下面的代码片段展示了如何使用Java客户端API提交Oozie作业。

  1. import org.apache.oozie.client.OozieClient;
  2. import org.apache.oozie.client.WorkflowJob;
  3. .
  4. import java.util.Properties;
  5. .
  6. ...
  7. .
  8. // get a OozieClient for local Oozie
  9. OozieClient wc = new OozieClient("http://bar:11000/oozie");
  10. .
  11. // create a workflow job configuration and set the workflow application path
  12. Properties conf = wc.createConfiguration();
  13. conf.setProperty(OozieClient.APP_PATH, "hdfs://foo:8020/usr/tucu/my-wf-app");
  14. .
  15. // setting workflow parameters
  16. conf.setProperty("jobTracker", "foo:8021");
  17. conf.setProperty("inputDir", "/usr/tucu/inputdir");
  18. conf.setProperty("outputDir", "/usr/tucu/outputdir");
  19. ...
  20. .
  21. // submit and start the workflow job
  22. String jobId = wc.run(conf);
  23. System.out.println("Workflow job submitted");
  24. .
  25. // wait until the workflow job finishes printing the status every 10 seconds
  26. while (wc.getJobInfo(jobId).getStatus() == Workflow.Status.RUNNING) {
  27. System.out.println("Workflow job running ...");
  28. Thread.sleep(10 * 1000);
  29. }
  30. .
  31. // print the final status o the workflow job
  32. System.out.println("Workflow job completed ...");
  33. System.out.println(wf.getJobInfo(jobId));
  34. ...

Local Oozie的例子

Oozie提供了一个内嵌的Oozie实现 LocalOozie ,它对于在IDE的便利下开发、调试和测试工作流应用程序非常有用。 (LocalOozie 404 不存在)
下面的代码片段显示了 LocalOozie 类的用法。与Oozie的所有交互都是使用Oozie OozieClient Java API完成的,如前一节所示。
与Oozie绑定的示例包括完整的、正在运行的类 LocalOozieExample ,这个代码片段就是从这个类获得的。

  1. import org.apache.oozie.local.LocalOozie;
  2. import org.apache.oozie.client.OozieClient;
  3. import org.apache.oozie.client.WorkflowJob;
  4. .
  5. import java.util.Properties;
  6. .
  7. ...
  8. // start local Oozie
  9. LocalOozie.start();
  10. .
  11. // get a OozieClient for local Oozie
  12. OozieClient wc = LocalOozie.getClient();
  13. .
  14. // create a workflow job configuration and set the workflow application path
  15. Properties conf = wc.createConfiguration();
  16. conf.setProperty(OozieClient.APP_PATH, "hdfs://foo:8020/usr/tucu/my-wf-app");
  17. .
  18. // setting workflow parameters
  19. conf.setProperty("resourceManager", "foo:8032");
  20. conf.setProperty("inputDir", "/usr/tucu/inputdir");
  21. conf.setProperty("outputDir", "/usr/tucu/outputdir");
  22. ...
  23. .
  24. // submit and start the workflow job
  25. String jobId = wc.run(conf);
  26. System.out.println("Workflow job submitted");
  27. .
  28. // wait until the workflow job finishes printing the status every 10 seconds
  29. while (wc.getJobInfo(jobId).getStatus() == WorkflowJob.Status.RUNNING) {
  30. System.out.println("Workflow job running ...");
  31. Thread.sleep(10 * 1000);
  32. }
  33. .
  34. // print the final status of the workflow job
  35. System.out.println("Workflow job completed ...");
  36. System.out.println(wc.getJobInfo(jobId));
  37. .
  38. // stop local Oozie
  39. LocalOozie.stop();
  40. ...