【问题标题】:Airflow DAG is running for all the retriesAirflow DAG 正在运行所有重试
【发布时间】:2020-04-09 15:45:45
【问题描述】:

我有一个 DAG 运行了几个月,从上周开始它的行为异常。我正在运行一个 bash 运算符,它正在执行一个 shell 脚本,在 shell 脚本中我们有一个配置单元查询。 重试次数设置为 4,如下所示。

default_args = { '所有者':'气流', 'depends_on_past':错误, '电子邮件':['airflow@example.com'], 'email_on_failure':错误, 'email_on_retry':错误, “重试”:4, 'retry_delay': timedelta(分钟=5) }

我可以在日志中看到它正在触发 hive 查询并在一段时间(大约 5 到 6 分钟)后失去心跳并进行重试。 Yarn 显示查询尚未完成,但气流触发了下一次运行。现在在纱线中 2 个查询正在运行(一个用于第一次运行,第二个用于重试),用于同一任务。类似地,此 dag 为同一任务触发 5 个查询(因为重试为 4)并在最后一个显示失败状态. 有趣的一点是,同一个 dag 长期以来一直运行良好。此外,这也是生产中与 hive 相关的所有 dags 的问题。 今天我升级到最新版本的气流 v 1.10.9。 在这种情况下,我使用的是 LocalExecuter。

有人遇到过类似的问题吗?

【问题讨论】:

  • 经过更多调查后,我发现我的任务是在运行时让 Zombie,而气流没有得到心跳。我正在通过任务执行者运行气流 dags。我已经在airflow.cfg 中进行了一些更改,并将zombie_task_timeout 从默认值更改为15 分钟。
  • 检查 Airflow 日志、调度器、worker 和任务的所有日志。不完全是同一个问题,但有时 Airflow UI 会丢失后端引用,即使后台作业正在运行,它也会重新尝试作业,bcz UI 数据库未更新为正确的状态。

标签: airflow-scheduler airflow


【解决方案1】:

Airflow UI 不会自行启动重试,无论它是否连接到后端数据库。看起来您的任务执行者会变成僵尸,在这种情况下,调度程序的僵尸检测会启动并调用任务实例 (TI) 的 handle_failure 方法。因此,简而言之,您可以在 dag 中覆盖该方法并添加一些日志记录以查看发生了什么,实际上您应该能够使用 Hadoop RM 并检查您的工作状态并做出相应的决定,包括取消重试。

例如,请参阅this 代码,我编写该代码仅用于处理僵尸故障。

【讨论】:

    猜你喜欢
    • 2017-08-21
    • 2019-08-12
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多