如何正确设置气流计划程序

时间:2018-10-05 16:22:30

标签: python scheduler airflow airflow-scheduler

我正在尝试安排气流中的任务,但显然不是那么明显。

我要运行的任务非常简单,这是DAG配置:

from datetime import datetime
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.python_operator import PythonOperator

def print_hello():
    return 'Hello world!'

dag = DAG('hello_world', description='Simple tutorial DAG',
          schedule_interval='30 15 * * *',
          start_date=datetime(2018, 10, 3), catchup=False)

dummy_operator = DummyOperator(task_id='dummy_task', retries=3, 
dag=dag)

hello_operator = PythonOperator(task_id='hello_task', 
python_callable=print_hello, dag=dag)

dummy_operator >> hello_operator

这意味着我想每天15:30运行它。例如,如果我今天打开此任务,它不会在15:30触发,但会在明天触发。这与执行间隔的左侧边界有关(这是Airflow的一个奇怪功能)。

所以问题是:

如何准确地在今天的15:30而不是明天在执行间隔结束时触发任务?

任何建议或澄清将不胜感激。

2 个答案:

答案 0 :(得分:0)

我今天(2018-10-05T17:54:00 + 0)创建了完全相同的DAG脚本。 Airflow(v1.10)为2018-10-04T15:30:00 + 0创建了DAG运行(应在2018-10-05T15:30:00 + 0 [0]之后的某个时间执行)并立即启动(因为它已经在2018-10-05T15:30:00 + 0之后)。由于catchup=False,它没有为2018-10-03T15:30:00 + 0创建DAG运行,它指示调度程序仅为DAG间隔系列[{{ 3}}]。

因此,今天(2018-10-05)运行的DAG运行是计划于2018-10-04T15:30:00 + 0运行的DAG运行,因为其计划间隔今天结束。

在您的情况下,您为什么看不到今天在Airflow Web UI中运行DAG(即2018-10-04T15:30:00 + 0的DAG)的原因可能是您首先设置了{{1 }}到今天,安排了DAG,然后尝试将start_date更改为较早的一天。调度程序实际上创建了一个较早日期的DAG运行,但Web UI并未显示它。解决此问题的最简单方法是在更改start_datedag_id [1]时更改hello_world_2(例如,更改为start_date等),然后重新启动调度程序。

答案 1 :(得分:0)

我想我明白了。

根据[1]atomic execution series由Airflow创建。每个执行系列都有执行日期,表示执行间隔的开始。

因此,在我的情况下,执行日期(10-04T15:30:00 + 00:00)表示时间间隔从10月4日开始,并在10月5日同时结束( now ),正在执行今天的任务。

相关问题