繁体   English   中英

Airflow / Python - 如何根据外部进程恢复 DAG 流

[英]Airflow / Python - How to resume DAG flow based on external process

Using Airflow 1.8.0 and python 2.7

具有以下 DAG(简化):

(Phase 1)-->(Phase 2)

在第 1 阶段,我触发了一个耗时的异步进程,最多可以运行 2 天,当进程结束时,它会在 S3 上写入一些有效负载。 在那个时期,我希望 DAG 等待并仅在 S3 有效负载存在时继续进行第 2 阶段。

我想到了2个解决方案:

  1. 当第 1 阶段开始时,使用实验性 REST API暂停 DAG,并在该过程结束后恢复。
  2. 使用每隔 X 分钟检查 S3 有效负载的运算符等待。

我不能使用选项 1,因为我的管理员不允许使用实验性 API,选项 2 似乎是一个不好的做法(检查每 X 小步舞曲)。

还有其他选择可以解决我的任务吗?

我认为选项(2)是“正确的方法”,您可以对其进行一些优化:

BaseSensorOperator支持poke_interval ,因此它应该可用于S3KeySensor以增加尝试之间的时间。

Poke_interval - 作业应在每次尝试之间等待的时间(以秒为单位)

此外,您可以尝试使用mode并将其切换到reschedule

模式:传感器的工作方式。 选项是: { poke | reschedule } { poke | reschedule } ,默认是poke 当设置为poke ,传感器在整个执行时间内占用一个工作槽,并在poke之间休眠。 如果传感器的预期运行时间较短或需要较短的戳击间隔,请使用此模式。 请注意,在此模式下,传感器将在传感器运行时保持工作槽和池槽。 当设置为reschedule ,传感器任务会在尚未满足条件时释放工作槽,并在稍后重新调度。 如果预计满足条件之前的时间很长,请使用此模式。 poke 间隔应超过一分钟,以防止调度程序负载过多。

不确定 Airflow 1.8.0 - 找不到旧文档(我假设支持poke_interval ,但不支持mode )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM