繁体   English   中英

尽管预定每5分钟运行一次,Airflow的DAG在一分钟内运行了多次

[英]Airflow's DAG runs multiple times in one minute, although it was scheduled to run every 5 minutes

我创建了一个DAG,该DAG计划使用cron语法每5分钟执行一次。 同样,该池是为此dag创建的,仅具有单个插槽。

我试图重新启动服务器/调度程序并重置数据库。 当前,DAG在UTC时间运行。 另外,我试图设置我的本地时区,即“欧洲/明斯克”(UTC + 3),但不起作用。

import random
import time
import airflow
from airflow.models import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta


default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': airflow.utils.dates.days_ago(2),
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
    'pool': 'download',
    # 'priority_weight': 10,
    # 'queue': 'bash_queue',
}

params = {
    'table': 'api_avitoimage',
}

dag = DAG(
    dag_id='test_download_avitoimage',
    default_args=default_args,
    schedule_interval='*/5 * * * *',
)


def sleep_for_a_bit(random_base):
    time.sleep(random_base)

with dag:

    download = BashOperator(
        task_id='download',
        bash_command='/usr/bin/python3 /home/artur/downloader.py --table {{ params.table }}',
        params=params,
        dag=dag)

    sleep = PythonOperator(
        task_id='sleep_for_a_bit',
        python_callable=sleep_for_a_bit,
        op_kwargs={'random_base': random.uniform(0, 1)},
        dag=dag,
    )

    download >> sleep

问题: DAG每分钟运行约2-3次,这完全是不正确的执行。 编辑:碰巧同时有16/16个活动DAG运行。但是我不明白这个“魔术数字16”来自何处。

默认情况下,Airflow尝试完成自start_date以来的所有“缺失” DAG。 由于您的start_date设置为airflow.utils.dates.days_ago(2) ,因此Airflow在开始按计划启动DAG之前将运行576次DAG。 您可以通过在DAG定义中添加catchup = False来关闭它(而不是default_args)。

幻数16来自参数max_active_runs_per_dag = 16 (默认设置)。

暂无
暂无

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

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