以编程方式从另一个oozie工作流程中检查oozie工作流程中动作的状态

时间:2019-02-11 11:43:01

标签: scala apache-spark oozie oozie-coordinator oozie-workflow

我正在oozie工作流程中运行一些代码,名为WF1的动作名为AC1。。此工作流程未计划,但仍在连续运行。通常,动作AC1每天轮流执行4次。以前不知道执行此操作的时间。 现在,还有另一个Oozie工作流程WF2,计划使用Oozie协调器在凌晨4:00运行。该WF2仅运行3-4分钟,因为这是在非高峰时间运行所需的小代码。 在此WF2中,我们要检查工作流操作AC1的状态(作为WF1的一部分运行[每次运行AC1实例时,都会为其分配新的ID)。是否可以仅使用名称来获取AC1的状态,而无需知道ID?

我知道我有一个解决方法,可以将AC1的状态存储在Hive表中,并不断查询以了解状态。但是,如果提供一些开箱即用的东西,将会很有帮助。

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到(如您所述)。

内置方法是使用job information 因此,您可以简单地获取并获得所有操作的作业状态响应,在下面的示例中,您可以转到actions查找您的操作名称并更改status,例如:

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
.
{ 
  id: "0-200905191240-oozie-W",
  appName: "indexer-workflow",
  appPath: "hdfs://user/bansalm/indexer.wf",
  externalId: "0-200905191230-oozie-pepe",
  user: "bansalm",
  status: "RUNNING",
  conf: "<configuration> ... </configuration>",
  createdTime: "Thu, 01 Jan 2009 00:00:00 GMT",
  startTime: "Fri, 02 Jan 2009 00:00:00 GMT",
  endTime: null,
  run: 0,
  actions: [
    {
      id: "0-200905191240-oozie-W@indexer",
      name: "AC1",
      type: "map-reduce",
      conf: "<configuration> ...</configuration>",
      startTime: "Thu, 01 Jan 2009 00:00:00 GMT",
      endTime: "Fri, 02 Jan 2009 00:00:00 GMT",
      status: "OK",
      externalId: "job-123-200903101010",
      externalStatus: "SUCCEEDED",
      trackerUri: "foo:8021",
      consoleUrl: "http://foo:50040/jobdetailshistory.jsp?jobId=...",
      transition: "reporter",
      data: null,
      errorCode: null,
      errorMessage: null,
      retries: 0
    },