Понимание даты выполнения и расписания Airflow - PullRequest
1 голос
/ 10 апреля 2020

Новичок в потоке воздуха, поступающем из cron, пытаясь понять, как макрос execution_date применяется к системе планирования и когда запускается вручную. Я прочитал часто задаваемые вопросы и настроил расписание для того, что, как я ожидал, будет выполнено с правильным заполненным макросом execution_date.

Я хотел бы запускать свой dag еженедельно, в четверг в 10:00 UT C , Иногда я запускаю его вручную. Насколько я понимаю, дата начала работы метки должна быть на один период позади фактической даты, когда я хочу, чтобы метка начиналась. Итак, чтобы выполнить dag сегодня, 4/9/2020, с 4/9/20020 execution_date я устанавливаю следующие значения по умолчанию:

default_args = {
    'owner': 'airflow',
    'start_date': dt.datetime(2020, 4, 2),
    'concurrency': 4,
    'retries': 0
}

И dag определяется как:

with DAG('my_dag',
        catchup=False,
        default_args=default_args,
        schedule_interval='0 10 * * 4',
        max_active_runs=1,
        concurrency=4,
         ) as dag:

opr_exc = BashOperator(task_id='execute_dag',bash_command='/path/to/script.sh --dt {{ ds_nodash }}')

Несмотря на то, что сегодня, 4/9, даг выполнялся вовремя, он выполнялся с ds_nodash 20200402 вместо 20200409. Я думаю, что я все еще в замешательстве, так как перехват был отключен, дата начала была одна неделя до этого я ожидал 20200409.

Теперь я нашел другой ответ здесь , который в основном объясняет, что execution_date находится в начале периода и всегда на один период позади. Итак, в будущем я должен использовать next_ds_nodash? Не создаст ли это проблемы для запускаемых вручную дагов, так как execution_date работает должным образом при запуске по требованию. Или next_ds_nodash переводится в ds_nodash при ручном запуске?

Вопрос: Есть ли радостная среда, которая позволяет мне правильно передать макрос execution_date в мой недельный прогон запуска при выполнении по расписанию И при запуске вручную? Какая лучшая практика здесь?

1 Ответ

0 голосов
/ 14 апреля 2020

После нескольких дополнительных исследований и испытаний действительно выясняется, что next_ds_nodash становится эквивалентным ds_nodash при ручном запуске dag.

Таким образом, если вы находитесь в аналогичной ситуации, сделайте следующее, чтобы правильно спланировать свое еженедельное задание на запуск (с дополнительными ручными триггерами)

  1. Установите start_date за одну неделю до дата, которую вы действительно хотите начать
  2. Сконфигурируйте schedule_interval соответственно для того, когда вы хотите запустить задание
  3. Используйте макросы next даты выполнения для того места, где вы ожидаете получить ожидаемое текущее выполнение дата начала работы.

Это работает для меня, но мне не нужно иметь дело с какими-либо опциями захвата / обратной засыпки, поэтому YMMV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...