我可以在外部(使用http请求吗?)将与dag_id和run_id相关联的特定task_id标记为成功/失败。
我的任务是外部系统上的长期任务,我不希望我的任务轮询系统以查找状态..因为我们可能同时运行几个1000任务..
理想情况下我的任务是
由于
答案 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