Apache Airflow:将追赶设置为False无效

时间:2019-02-27 09:39:24

标签: scheduler airflow

我在Apache airflow上创建了DAG。似乎已将Scheduler配置为从2015年6月开始运行(顺便说一句。我不知道为什么,但是它是创建的新DAG,但我没有回填它,我只是用这些DAG ID回填了其他dag日期间隔,然后调度程序将这些日期填满并填满我的新数据。我开始处理气流问题。

(更新:由于DAG默认配置中设置了开始日期,所以我意识到DAG已回填,尽管这不能解释我在下面公开的行为)

我正在尝试停止调度程序以从该日期开始运行所有DAG执行。 airflow backfill --mark_success tutorial2 -s '2015-06-01' -e '2019-02-27'命令给我数据库错误(见下文),所以我试图将追赶设置为False。

  

sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)否这样   表格:作业[SQL:'INSERT INTO作业(dag_id,状态,作业类型,   开始日期,结束日期,最新心跳,执行者类,主机名,   unixname)VALUES(?,?,?,?,?,?,?,?,?)'] [参数:   ('tutorial2','running','BackfillJob','2019-02-27 10:52:37.281716',   无,'2019-02-27 10:52:37.281733','SequentialExecutor',   '08b6eb432df9','airflow')](此错误的背景信息:   http://sqlalche.me/e/e3q8

所以我正在使用另一种方法。我尝试过的:

  1. 在airflow.cfg中设置catchup_by_default = False并重新启动 整个Docker容器。
  2. 在我的pyhton DAG文件上设置catchup = False并启动文件 再次使用python。

我在网络UI上看到的内容

DAG的处决将于2015年6月开始: DAG's executions are being launched starting at June 2015. 在DAG的配置中,Catchup设置为False:

Catchup is set to False on DAG's configuration 所以我不明白为什么要启动那些DAG的行刑。

谢谢

DAG代码:

"""
Code that goes along with the Airflow tutorial located at:
https://github.com/apache/airflow/blob/master/airflow/example_dags/tutorial.py
"""
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta


default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2015, 6, 1),
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
    'catchup' : False,
    # 'queue': 'bash_queue',
    # 'pool': 'backfill',
    # 'priority_weight': 10,
    # 'end_date': datetime(2016, 1, 1),
}

dag = DAG(
    'tutorial2', default_args=default_args, schedule_interval='* * * * *')

# t1, t2 and t3 are examples of tasks created by instantiating operators
t1 = BashOperator(
    task_id='print_date',
    bash_command='date',
    dag=dag)

t2 = BashOperator(
    task_id='sleep',
    bash_command='sleep 5',
    retries=3,
    dag=dag)

templated_command = """
    {% for i in range(5) %}
        echo "{{ ds }}"
        echo "{{ macros.ds_add(ds, 7)}}"
        echo "{{ params.my_param }}"
    {% endfor %}
"""

t3 = BashOperator(
    task_id='templated',
    bash_command=templated_command,
    params={'my_param': 'Parameter I passed in'},
    dag=dag)

t2.set_upstream(t1)
t3.set_upstream(t1)

1 个答案:

答案 0 :(得分:0)

我认为您实际上需要在dag级别指定追赶,而不是通过default_args传递。 (无论如何,后者实际上没有任何意义,因为这些是任务的默认参数。您无法赶上某些任务,而其他任务则无法。)

尝试一下:

dag = DAG(
    'tutorial2', default_args=default_args, schedule_interval='* * * * *', catchup=False)