DAG выполняет ОК из веб-интерфейса, но не работает при запуске из командной строки

Я пытаюсь протестировать свой DAG с помощью интерфейса командной строки во время разработки новых функций, но не могу этого сделать. Мои DAG-файлы, DAG_ID = sample_dag, file: sample_dag.py находится в папке ~ / airflow / dags (Ubuntu) и может быть запущен OK через веб-интерфейс (щелкнув значок Play). В DAG есть несколько вызовов BASH OPERATOR, и каждый скрипт выполняется правильно, выводя записанный результат.

Однако я не могу получить доступ к той же функциональности DAG через командную строку, запущенную из той же папки, например: airflow render sample_dag all 2019-01-14T06: 04: 05

Результат выполнения приведенной выше команды: Test Dag Begin Test Dag End **** airflow.exceptions.AirflowException: dag_id не может быть найден: sample_dag. Либо даг не существует, либо его не удалось проанализировать. ****

Отпечатки отладки в DAG выполняются, но сценарий Bash не вызывается (журнал сценария не создается).

import datetime as dt
from airflow import DAG
from airflow.operators.bash_operator import BashOperator

default_args = {
    'owner': 'airflow',
    'start_date': dt.datetime(2019, 1, 12),
    'retries': 1,
    'retry_delay': dt.timedelta(minutes=5),
    'email_on_failure': False,
    'email_on_retry': False,
}

dag = DAG('sample_dag', default_args=default_args, schedule_interval=None)

t0 = BashOperator(
    task_id='all', bash_command='echo "Starting Tests..."', dag=dag)

t1 = BashOperator(
    task_id='test_1',
    bash_command='python3 /home/ubuntu/scripts/test_1.py &>> /home/ubuntu/scripts/test.log',
    dag=dag)

t2 = BashOperator(
    task_id='test_2',
    bash_command='python3 /home/ubuntu/scripts/test_2.py &>> /home/ubuntu/scripts/test.log',
    dag=dag)

t3 = BashOperator(
    task_id='final', bash_command='echo "Client Profile Tests Complete"', dag=dag)

print("Test Dag Begin")

t0 >> t1
t0 >> t2
t1 >> t3
t2 >> t3

print("Test Dag End")

person Imios Archangelis    schedule 14.01.2019    source источник
comment
Является ли ваш DAG выводом airflow list_dags?   -  person Alessandro Cosentino    schedule 15.01.2019
comment
Да, это так ... Сообщение очень сбивает с толку, так как Dag в некотором роде работает - команды печати фактически выполняются с рендерингом воздушного потока или запуском воздушного потока. Однако код оператора Bash не вызывается из командной строки, только из веб-интерфейса. Я подозревал, что проблемы с интерпретатором Python вызываются через оператор Bash, но это не так. То же самое происходит, если команды Bash просто: echo TestN & ›› /home/ubuntu/scripts/test.log. На самом деле не понимаю, что происходит. Помощь будет оценена.   -  person Imios Archangelis    schedule 15.01.2019
comment
Я также пробовал запустить: airflow backfill -s -1 sample_dag [2019-01-15 15:02:23,685] {jobs.py:2212} INFO - [backfill progress] | finished run 0 of 1 | tasks waiting: 3 | succeeded: 1 | running: 0 | failed: 0 | skipped: 0 | deadlocked: 0 | not ready: 2 [2019-01-15 15:02:28,692] {jobs.py:2212} INFO - [backfill progress] | finished run 0 of 1 | tasks waiting: 3 | succeeded: 1 | running: 0 | failed: 0 | skipped: 0 | deadlocked: 0 | not ready: 2... Еще больше запутался: как задачи, просто выполняющие эхо, не могут быть готовы ?!   -  person Imios Archangelis    schedule 15.01.2019
comment
Ха, кажется, единственная команда, которая действительно работает так, как ожидалось: airflow trigger_dag sample_dag. Кажется, что рендеринг воздушного потока просто отображает то, что должно быть выполнено, но ничего не выполняет (сильно отличается от, например, рендеринга графики). Какой воздушный прогон должен делать я вообще не понимаю.   -  person Imios Archangelis    schedule 15.01.2019
comment
На первый взгляд, этот мой ответ может относиться и к вашему случаю: stackoverflow.com/a/52610828/825190   -  person Alessandro Cosentino    schedule 15.01.2019


Ответы (1)


Команда airflow render cli просто отображает параметры шаблонизированного оператора. Он не запустит ваш DAG.

airflow render [-h] [-sd SUBDIR] dag_id task_id execution_date

Вы должны использовать trigger_dag для запуска вашего dag с помощью cli

person kaxil    schedule 15.01.2019