Airflow - 将给定dag_id和run_id的特定task_id标记为成功或失败

时间:2016-10-29 01:27:48

标签: airflow

我可以在外部(使用http请求吗?)将与dag_id和run_id相关联的特定task_id标记为成功/失败。

我的任务是外部系统上的长期任务,我不希望我的任务轮询系统以查找状态..因为我们可能同时运行几个1000任务..

理想情况下我的任务是

  • 发出http请求以启动我的外部工作
  • 去睡觉
  • 一旦作业完成,它(外部系统或我的工作的后期构建操作)通知气流该任务已完成(由task_id,dag_id和run_id标识)

由于

2 个答案:

答案 0 :(得分:1)

Airflow还没有Rest端点。但是你有几个选择 - 使用气流命令行实用程序将作业标记为成功。例如。在使用Popen的python中。 - 直接更新Airflow DB表task_instance

答案 1 :(得分:0)

您可以通过将SQL查询直接发送到Airflow的元数据数据库来解决此问题:

UPDATE task_instance
SET state = 'success',
    try_number = 0
WHERE
    task_id = 'YOUR-TASK-ID'
AND
    dag_id = 'YOUR-DAG-ID'
AND
    execution_date = '2019-06-27T16:56:17.789842+00:00';

注释

  • execution_date过滤器至关重要,Airflow会根据execution_date而不是根据其run_id来识别DagRun。这意味着您确实需要获取DagRun的执行/运行日期才能使其正常工作。
  • 之所以添加try_number = 0部分,是因为有时Airflow如果注意到try_number已经达到极限(failed),则会将任务重置为max_tries

您可以在Airflow的源代码中查看它:https://github.com/apache/airflow/blob/750cb7a1a08a71b63af4ea787ae29a99cfe0a8d9/airflow/models/dagrun.py#L203