如何从 UI 停止/终止 Airflow 任务

Posted

技术标签:

【中文标题】如何从 UI 停止/终止 Airflow 任务【英文标题】:How to stop/kill Airflow tasks from the UI 【发布时间】:2017-09-23 17:00:42 【问题描述】:

如何停止/终止 Airflow UI 上正在运行的任务?我正在使用LocalExecutor。 即使我使用CeleryExecutor,我如何才能杀死/停止正在运行的任务?

【问题讨论】:

【参考方案1】:

将任务设置为失败状态:

    点击任务

    将任务设置为“失败”状态

    所有后续任务(如果有的话)也将被标记为失败:

【讨论】:

【参考方案2】:

来自气流 gitter (@villasv)

" 不优雅,不。您可以停止 dag(取消标记为正在运行)并清除 任务在 UI 中声明甚至删除它们。实际运行 执行器中的任务不会停止,但如果 executor 意识到它不在数据库中了。 "

【讨论】:

【参考方案3】:

只需将任务设置为失败状态即可停止正在运行的任务。

[2019-09-17 23:53:28,040] logging_mixin.py:82 INFO - [2019-09-17 23:53:28,039] jobs.py:2695 WARNING - State of this instance has been externally set to failed. Taking the poison pill.
[2019-09-17 23:53:28,041] helpers.py:240 INFO - Sending Signals.SIGTERM to GPID 20977

【讨论】:

这是对我有用的解决方案。对于其他找到这篇文章的人,可以在这里找到更多信息:issues.apache.org/jira/browse/AIRFLOW-2285 也适合我。其他答案暗示不确定,但您可以在更改状态后检查日志。 这不是最好的方案,如果任务还有重试,它会继续重试。【参考方案4】:

正如 Pablo 和 Jorge 所提到的,如果执行已经开始,暂停 Dag 不会停止执行任务。然而,有一种方法可以从 UI 停止正在运行的任务,但它有点 hacky。

当任务处于running 状态时,您可以单击CLEAR 这将调用job.kill(),任务将设置为shut_down 并立即移动到up_for_retry,因此它会停止。

显然 Airflow 并不意味着您可以清除 Running 状态下的任务,但是由于 Airflow 没有禁用它,所以您可以按照我的建议使用它。 Airflow 意味着CLEARfailedup_for_retry 等一起使用......也许将来社区会使用这个错误(?)并将其作为“关闭任务”按钮的功能来实现。

【讨论】:

【参考方案5】:

在 DAG 屏幕中,您可以看到正在运行的任务:

Example

在“最近的任务”上按运行图标,Airflow 将自动运行搜索查询,其中 Dag Id 和状态的过滤器等于“正在运行”,并在“任务实例”屏幕上显示结果(您可以在选项卡浏览 > 任务实例)。

您可以在此处选择呈现的任务并将它们设置为另一种状态或删除它们。

请注意,如果 DAG 当前正在运行,Airflow 调度程序将重新启动您删除的任务。因此,要么先通过更改状态来停止 DAG,要么停止调度程序(如果您在测试环境中运行)。

【讨论】:

即使我停止调度并删除任务,它不会重新启动任务吗? 如果您停止调度程序并且您不希望该任务再次运行,只需手动将任务设置为“成功”状态,而不是删除它。如果您只是删除它,调度程序将再次运行该任务。 我暂停了 DAG 并删除了记录,但进程仍在运行。有没有办法不仅根据执行者改变状态,还杀死底层进程?

以上是关于如何从 UI 停止/终止 Airflow 任务的主要内容,如果未能解决你的问题,请参考以下文章

Airflow 中文文档:UI /截图

Airflow:如何从 Postgres Operator 推送 xcom 价值?

Airflow - 从 BigQuery 动态生成任务,但任务在之前完成之前重复运行

Airflow:如何从不同的服务器进行 SSH 和运行 BashOperator

如何在 Airflow 中创建条件任务

如何停止一个正在运行的线程?