气流-在先前实例未完成时DAG会获得另一个实例

时间:2019-12-23 12:07:58

标签: airflow

我使用气流已经有一段时间了,遇到了重复发生的DAG同时运行两次的问题。请允许我解释一下:

我有一个DAG,它由一些BashOperators,PythonOperators和一个SubDagOperator的五个实例组成(该实例使用Bash执行一些较长的应用程序),然后从FileSensor开始。

 FileSensor(
        task_id='wait_for_data',
        fs_conn_id='fs_default',
        filepath=metadata_path_local,
 )

通过以下方式创建dag:

 default_args = {
    'owner': 'MyProject',
    'depends_on_past': False,
    'start_date': datetime(2015, 6, 1),
    'email': [configuration.conf.get('user', 'email_address')],
    'email_on_failure': configuration.conf.getboolean('user', 'email_on_failure'),
    'email_on_retry': configuration.conf.getboolean('user', 'email_on_retry'),
    'retries': 1,
    'retry_delay': timedelta(minutes=1),
    'mode': 'reschedule'
}

DAG(
    'dag_name',
    default_args=default_args,
    schedule_interval=timedelta(minutes=1),
    concurrency=5,
    max_active_runs=1,
    catchup=False,
    dagrun_timeout=timedelta(hours=3)
) 

我希望DAG在3小时后停止运行,而不管结果如何或处于什么位置,这就是dagrun_timeout arg的原因。并行性设置为5,以允许所有SubDagOperator实例彼此并排运行。另外,请注意max_active_runs = 1

最后,对于我遇到的问题- FileSensor从1PM开始。在下午3:30,它在受跟踪的目录中找到一个文件并开始该过程-最终到达SubDAG,并在那儿延迟执行较长的过程。 下午4点,DAG的新实例将开始与之一起运行-我绝对不希望发生这种情况。

当我检查DAG计划时,运行之间恰好相差3小时-这使dagrun_timeout成为我的直接怀疑对象。我有一个论点,那就是SubDagOperator不继承dagrun_timeout,因此我将其添加到了它的初始化中:

subdag = DAG(
    'subdag_1', # 2,3,4,5 for the other instances
    default_args=default_args,
    schedule_interval=timedelta(minutes=1),
    concurrency=5,
    max_active_runs=1,
    catchup=False,
    orientation='TB',
    dagrun_timeout=timedelta(hours=3)
) 

但不幸的是,问题仍然存在。

我想念什么?如何保证排除不同的DAG运行?

提前谢谢!

0 个答案:

没有答案