【问题标题】:Oozie coordinator with Asynchronous Data Set带有异步数据集的 Oozie 协调器
【发布时间】:2015-04-29 02:40:23
【问题描述】:

我们希望根据数据可用性安排工作流程,但没有特定的数据到达频率。此外,可能会有多次数据重新运行,因此当天的数据的多个版本随时到达。

据我了解,目前在协调器中必须指定频率参数。

但是,我们希望仅根据某些事件(数据到达或分区创建)触发我们的工作流,而不依赖于频率。

似乎这符合异步数据集的条件。 Oozie 是否支持异步数据集?

【问题讨论】:

  • 你解决了吗?我也有类似的要求。谢谢
  • 我们知道吗,我们该怎么做? - 提到了一种方法 - 通过 shell 直接触发工作流并使用 shell 命令来感知数据。

标签: oozie oozie-coordinator


【解决方案1】:

频率参数是强制性的,但你可以指定一个输入事件,像这样:

<datasets>
    <dataset name="mydata" frequency="${coord:days(1)}" initial-instance="${initial_instance}" timezone="UTC">
        <uri-template>${hcat_uri}/${hcatDatabase}/${hcatTable}/dt=${YEAR}${MONTH}${DAY}</uri-template>
    </dataset>
</datasets>
<input-events>
    <data-in name="MYDATA_IN" dataset="mydata">
        <instance>${coord:current(0)}</instance>
    </data-in>
</input-events>

https://oozie.apache.org/docs/3.1.3-incubating/CoordinatorFunctionalSpec.html#a6.1.4._Input_Events

所以定义一个相对较低的频率和一个有意义的单位,它会等待数据可用。可能为协调器指定一个超时时间是有意义的,小于频率:

<timeout>[TIME_PERIOD]</timeout>

或者您可以直接(不使用协调器)协调(启动)您的工作流程,例如:一个 cronjob,但这一点都不好。

【讨论】:

  • 感谢 kecso 的回复。我们已经以与您提到的类似的方式为我们的协调器配置了输入事件。有一个带有分区架构(value_date,id)的 HCat 表。 “id”是数据生产者提交的数据的标识符。因此,协调员可以等待 id=xyz 的数据,如下所示:value_date=2015-01-01;id=xyz 现在可以正常工作了。而且由于频率是 1 天,下一个协调器操作现在正在等待第二天的数据到达 (2015-01-02)。但是,数据生产者可以随时重新创建 2015-01-01 的分区。
  • 理想情况下,我们希望在分区模式中添加另一列“版本”,以识别数据生产者提交的相同数据的哪个版本。 value_date=2015-01-01;id=xyz;version=? 但是,问题是协调器不知道要等待什么版本。数据生产者可以通过以下方式提交一天的数据: - 晚上 7 点提交 id=xyz 的版本=v1 - 晚上 9 点提交 id=xyz 的版本=v2 - 晚上 9:30 提交 id=xyz 的版本=v3 .如何让 coordinator 在事件驱动的实现中处理所有这些?
  • 如果您自己处理工作流触发器,没有协调员怎么办?或者创建一个单独的操作(Fs 操作)什么检查数据可用性并基于标记调用处理或跳转到工作流的末尾?
  • coordinator 为我们提供了添加时间依赖的能力——例如晚上 10 点之前不要运行任何东西。通过 FS 操作,您是指轮询某些 hdfs 文件吗?如果是,那么我们希望避免轮询,因为它会给 NameNode 带来负担,因为轮询会每分钟发生一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多