【问题标题】:Initiate oozie coordinator on old dataset在旧数据集上启动 oozie 协调器
【发布时间】:2018-03-18 15:10:38
【问题描述】:

如何安排 oozie 协调器仅在昨天的数据集输入可用后才运行今天的实例。它只需要检查一个输入数据集,该数据集必须是旧数据集,例如 1 天前或 2 天前的数据集。它不必等待今天的数据集输入。

我尝试过使用类似下面的东西,这里我在实例标签中使用了 ${coord:current(-1)} 以便它可以检查昨天的数据,但这似乎不起作用。即使信号在昨天的日期不可用,作业也会在标称时间被解雇。

    <coordinator-app name="hello-coord" frequency="${coord:days(1)}"
              start="2009-01-02T08:00Z" end="2009-01-04T08:00Z" timezone="America/Los_Angeles"
             xmlns="uri:oozie:coordinator:0.1">
   <datasets>
   <dataset name="din" frequency="${coord:days(1)}"
            initial-instance="2009-01-02T08:00Z" timezone="America/Los_Angeles">
     <uri-template>${baseFsURI}/${YEAR}/${MONTH}/${DAY}</uri-template>
     <done-flag>_SUCCESS</done-flag>
    </dataset>
    </datasets>
  <input-events>
     <data-in name="input" dataset="din">
            <instance>${coord:current(-1)}</instance>
     </data-in>
  </input-events>
  <action>
  <workflow>
      <app-path>${wf_app_path}</app-path>
  </workflow>
  </action>

【问题讨论】:

  • 您能否在您的工作中使用oozie job -dryrun .. 并将解析后的值粘贴回您的原始问题中
  • 这是有效的。实际上,即使在信号不可用后,我的协调员的第一个实例也盲目地开始了该操作,因为数据集的“初始实例”标签不是旧日期。它与坐标“开始”值相同。但第二天的运行按预期触发,如果前一个信号不可用,则不会启动操作。对于快乐的流程,它也按预期工作。感谢您的帮助。

标签: hadoop scheduling oozie oozie-coordinator


【解决方案1】:

&lt;dataset&gt;标签用于设置触发文件出现的文件夹。

&lt;input-events&gt; 标记提供了计算文件夹参数(如 ${YEAR}、${MONTH} 和 ${DAY})的时间。

&lt;instance&gt;${coord:current(-1)}&lt;/instance&gt; 表示给出的时间是-1天。

因此在第一天,即“2009-01-02T08:00Z”,给予&lt;dataset&gt; 的时间是"2009-01-01T08:00Z",它早于initial-instance="2009-01-02T08:00Z"。 intial-instance 之前的所有动作都会执行,无需等待触发器文件出现。

解决办法是改initial-instance="2009-01-01T08:00Z"

【讨论】:

  • 同意。我想这就是我当时发现的,并对我原来的问题添加了评论。顺便说一句,感谢您进一步澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多