首页 > 解决方案 > 无需完全重启即可将代码部署到 Airflow

问题描述

我有一个 celery apache-airflow 设置,在 EC2 实例上有一个工作节点。对于代码部署,用户触发部署,将代码包复制到s3;一些与基础设施相关的脚本将代码包从 s3 复制到实例上;该实例触发所有与气流相关的服务的重新启动。

我想这样做,以便每当我需要修改代码时,理想情况下,当前正在运行的任何作业都应该继续运行,而无需使用集群设置。

我在想也许找到一种方法来重新启动 Web 服务器和调度程序而不重新启动工作人员可以解决这个问题。

标签: airflow

解决方案


根据我Airflow在 in的经验LocalExecutor,只需更改

  • DAG 定义文件(可能修改 DAG 的结构)
  • 经营者守则
  • DAG / 任务的输入(例如VariablesConnections)

不需要重新启动 Airflow 服务(webserverscheduler


  • 只有当您更改 DAG 的调度参数时,即start_dateschedule_interval,才需要重命名dag_id
  • 我读过一些建议,如果我不想重命名我的 DAG,重启Airflow服务也可以解决问题。但我发现这种说法不一致(并不总是有效)

请注意,以上事实是参考的LocalExecutor,它们可能不适用CeleryExecutor

-------------------------------------------------- ----------------------------

但是,对于Airflow scheduler(以及几乎所有长时间运行的进程),建议必须不时重新启动它。

调度程序应该经常重启

根据我们的经验,一个长时间运行的调度程序进程,至少对于 CeleryExecutor,最终不会调度某些任务。不幸的是,我们仍然不知道确切的原因。幸运的是,airflow 有一个内置的解决方法——num_runs 标志的形式。它指定调度程序在退出之前运行其循环的迭代次数。我们用 10 次迭代运行它,Airbnb 用 5 次迭代运行它。请注意,这会在使用 LocalExecutor 时引起问题。

上面的文章是 2015 年的,不知道从那以后事情是否发生了变化


推荐阅读