Всякий раз, когда я пытался запустить свой DAG, он получает состояние успеха, но не может выполнить задачу. При первом запуске работает отлично
< Сильный > trigger_controller_dag.py :
def conditionally_trigger(context, dag_run_obj):
c_p = context['params']['condition_param']
if context['params']['condition_param']:
dag_run_obj.payload = {'message': context['params']['message']}
pp.pprint(dag_run_obj.payload)
return dag_run_obj
dag = DAG(
dag_id='example_trigger_controller_dag',
default_args={
"owner": "airflow",
"start_date": datetime.utcnow(),
},
schedule_interval='@once',
)
trigger = TriggerDagRunOperator(
task_id='test_trigger_dagrun',
trigger_dag_id="example_trigger_target_dag",
python_callable=conditionally_trigger,
params={'condition_param': True, 'message': 'Hello World'},
dag=dag,
)
< Сильный > trigger_target_dag.py :
args = {
'start_date': datetime.utcnow(),
'owner': 'airflow',
}
dag = DAG(
dag_id='example_trigger_target_dag',
default_args=args,
schedule_interval=None,
)
def run_this_func(ds, **kwargs):
print("Remotely received value of {} for key=message".
format(kwargs['dag_run'].conf['message']))
run_this = PythonOperator(
task_id='run_this',
provide_context=True,
python_callable=run_this_func,
dag=dag,
)
При запуске DAG я получаю следующую ошибку: Зависимость 'Состояние экземпляра задачи' СБОЙ: Задача находится в состоянии «успех», которое не является допустимым для выполнения. Задача должна быть очищена для запуска
2 ответа
Ваши start_date
переменные в обеих DAGS являются динамическими и могут вызывать вашу проблему 'start_date': datetime.utcnow()
. Установка их в динамический запуск не рекомендуется и приводит к ошибкам.
Попробуйте установить статическую дату начала, например, 'start_date': datetime(2019, 5, 29) #year month day
Взято из FAQ по воздушным потокам
Мы не рекомендуем использовать динамические значения в качестве start_date, особенно datetime.now (), так как это может привести к путанице. Задание запускается после закрытия периода, и теоретически DAG @hourly никогда не достигнет часа спустя, поскольку now () движется дальше.
Еще один вопрос об этом: почему динамический начало вызывает проблемы
Вместо schedule_interval='@once'
попробуйте schedule_interval=None
.
@once
означает, что он будет запущен только один раз.
Новые вопросы
airflow
Apache Airflow - это платформа управления рабочими процессами, позволяющая программно создавать, планировать и отслеживать рабочие процессы в виде ориентированных ациклических графиков (DAG) задач.