airflow - 无需完全重启即可将代码部署到 Airflow
问题描述
我有一个 celery apache-airflow 设置,在 EC2 实例上有一个工作节点。对于代码部署,用户触发部署,将代码包复制到s3;一些与基础设施相关的脚本将代码包从 s3 复制到实例上;该实例触发所有与气流相关的服务的重新启动。
我想这样做,以便每当我需要修改代码时,理想情况下,当前正在运行的任何作业都应该继续运行,而无需使用集群设置。
我在想也许找到一种方法来重新启动 Web 服务器和调度程序而不重新启动工作人员可以解决这个问题。
解决方案
根据我Airflow
在 in的经验LocalExecutor
,只需更改
- DAG 定义文件(可能修改 DAG 的结构)
- 经营者守则
- DAG / 任务的输入(例如
Variables
,Connection
s)
不需要重新启动 Airflow 服务(webserver
和scheduler
)
- 只有当您更改 DAG 的调度参数时,即
start_date
和schedule_interval
,才需要重命名dag_id
- 我读过一些建议,如果我不想重命名我的 DAG,重启
Airflow
服务也可以解决问题。但我发现这种说法不一致(并不总是有效)
请注意,以上事实是参考的LocalExecutor
,它们可能不适用CeleryExecutor
-------------------------------------------------- ----------------------------
但是,对于Airflow
scheduler
(以及几乎所有长时间运行的进程),建议必须不时重新启动它。
调度程序应该经常重启
根据我们的经验,一个长时间运行的调度程序进程,至少对于 CeleryExecutor,最终不会调度某些任务。不幸的是,我们仍然不知道确切的原因。幸运的是,airflow 有一个内置的解决方法——num_runs 标志的形式。它指定调度程序在退出之前运行其循环的迭代次数。我们用 10 次迭代运行它,Airbnb 用 5 次迭代运行它。请注意,这会在使用 LocalExecutor 时引起问题。
上面的文章是 2015 年的,不知道从那以后事情是否发生了变化
推荐阅读
- reactjs - React Leaflet v3:创建控件的好方法
- ruby-on-rails - 无法找到或构建 blob 预期的可附加错误 (Rails)
- python - 如何将函数中的字符串转换为“垂直”或列显示?
- ios - 我收到此错误 -> 收到 500 错误。在 Swift GraphQL 中
- python - Pytube 模块标题未给出
- ios - 将多个图像保存到用户设备时如何处理错误?
- python - 始终转到与目标歌曲的 BPM 兼容的最接近的数字
- postgresql - 不直接使用其名称访问 PostgreSQL 表
- mysql - Google 数据洞察中的 GROUP BY 查询
- java - 这是选择排序还是冒泡排序?