Apache airflow: настройка захвата на False не работает - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть группа DAG, созданная в Apache.Кажется, планировщик настроен на запуск с июня 2015 года (Кстати. Я не знаю почему, но это новый DAG, созданный, и я не засыпал его, я только засыпал другой dag с другим DAG ID этимиинтервалы дат, и планировщик взял эти даты и заполнил мой новый тег. Я начинаю работать с потоком воздуха).

(Обновление: я понял, что DAG заполнен, потому что дата начала установлена ​​в конфигурации DAG по умолчанию,хотя это не объясняет поведение, которое я раскрываю ниже)

Я пытаюсь остановить планировщик для запуска всех выполнений DAG с этой даты.Команда airflow backfill --mark_success tutorial2 -s '2015-06-01' -e '2019-02-27' выдаёт мне ошибки базы данных (см. Ниже), поэтому я пытаюсь установить значение catchup в False.

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) нет такой таблицы: job[SQL: 'INSERT INTO job (dag_id, состояние, тип задания, start_date, end_date, latest_heartbeat, executor_class, имя хоста, unixname) VALUES (?,?,?,?,?,?,?,?,?)'] [Параметры: ('tutorial2', 'running', 'BackfillJob', '2019-02-27 10: 52: 37.281716', None, '2019-02-27 10: 52: 37.281733', 'SequentialExecutor', '08b6eb432df9','airflow')] (Справочная информация об этой ошибке: http://sqlalche.me/e/e3q8)

Так что я использую другой подход. Я попробовал:

  1. Настройка catchup_by_default =False в airflow.cfg и перезапуск всего контейнера Docker.
  2. Установка catchup = False для моего файла DAG pyhton и повторный запуск файла с python.

Что я вижу навеб-интерфейс:

Запуск DAG начинается с июня 2015 года: DAG's executions are being launched starting at June 2015. Catchup установлен наНеверно в конфигурации DAG:

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 голосов
/ 02 марта 2019

Я думаю, что на самом деле вам нужно указать уровень захвата на уровне dag, а не пропускать его через default_args.(Последнее на самом деле не имеет смысла, так как это аргументы по умолчанию для задач. Некоторые задачи не могут быть подтянуты, а другие нет.)

Попробуйте это:

dag = DAG(
    'tutorial2', default_args=default_args, schedule_interval='* * * * *', catchup=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...