airflow-scheduler - 调度程序节点始终高于 100% 利用率
问题描述
我们在运行 composer-1.11.3-airflow-1.10.9 的 5 个节点、n1-standard-2 集群上运行 Cloud Composer。私有 IP 已启用。选择 Python 3。我们目前有大约 30 个 DAG,其中一些包含 100 多个任务。大多数 DAG 每天运行一次。
运行工作负载的节点airflow scheduler
始终以大约 150% 的 CPU 利用率运行,无论运行任务的数量如何。降低 CPU 使用率的唯一方法是删除 DAG,直到只剩下 5 或 6 个(显然不是一个选项)。我们尝试过的:
- 我们已经关注了这篇Medium 文章,详细介绍了如何在专用节点上运行调度程序服务,但是我们找不到降低 CPU 使用率的配置。我们已经尝试过一个像在 100 GB SSD 上运行的 e2-highcpu-32 一样强大的节点。使用率保持在 150%。
- 我们尝试更新
airflow.cfg
变量以减少dags
通过设置解析目录的频率,例如store_serialized_dags
和max_threads
。同样,这对 CPU 使用率没有任何影响。
作为参考,其他节点大部分时间都以 30-70% 的 CPU 运行,当大型 DAG 运行时,会在短时间内飙升至 100% 以上。没有节点在内存使用方面存在任何问题,使用了 2 GB 到 4 GB 之间。
我们计划在未来添加更多 DAG,并担心调度程序可能会成为当前设置的瓶颈。是否有任何其他配置选项可用于减少 CPU 使用率以允许未来增加 DAG 数量?
针对 Ines 的回答进行编辑:我在Monitoring
选项卡中将 CPU 使用率视为百分比,运行调度程序服务的节点显示为橙色:
此外,当我查看运行的 pod 时,airflow scheduler
这是 CPU 使用率,几乎总是100%:
解决方案
请查看描述指标的官方文档。CPU usage per node
您能否详细说明您在哪里看到百分比值,因为文档提到了核心时间使用率:
显示节点中所有正在运行的 Pod 的 CPU 内核使用率的图表,以内核时间使用率来衡量。这不包括用于 Airflow UI 或 Cloud SQL 实例的 App Engine 实例的 CPU 使用率。高 CPU 使用率通常是 Worker Pod 驱逐的根本原因。如果您发现使用率非常高,请考虑扩展 Composer 环境或更改 DAG 运行的计划。
与此同时,有一个持续的解决方法,值得尝试。您应该按照以下步骤限制同步 POD 的 CPU 使用率:
- 转到
environment configuration
页面并单击view cluster workloads
- 点击
airflow-scheduler
,然后编辑 - 查找名称:
gcs-syncd
并添加:
resources:
limits:
cpu: some value (you can try with 300m)
requests:
cpu: 10m
然后单击save
(在底部)。
- 对气流工作人员重复该过程。
- 我们还必须编辑工作负载的气流调度程序部分
airflow-scheduler
。单击编辑 YAML 文件并为该部分airflow-scheduler
添加:
resources:
limits:
cpu: 750m
requests:
cpu: 300m
如果您可以尝试上述步骤并查看它是否可以提高性能,那就太好了。
有时,存储桶/logs
可能包含大量文件,这些文件会导致gcs-syncd
在对日志进行内部同步时大量使用 CPU。您可以尝试删除存储桶中一些最旧的日志gs://<composer-env-name>/logs
。例如,如果您想删除 May 的所有日志,请使用以下命令:
gsutil -m rm -r gs://europe-west1-td2-composter-a438b8eb-bucket/logs/*/*/2020-05*
理想情况下,GCE 实例不应始终运行超过 70% 的 CPU,否则 Composer 环境可能会在资源使用期间变得不稳定。
推荐阅读
- python - Pandas idxmax() 不适用于按包含 NaN 的时间段分组的系列
- c# - 使用 c# Interop 为刚刚使用“oDoc.Content.Text += reportText.Heading”添加的文本编辑文本大小/字体
- java - 作业帮助:数组很奇怪
- php - Opening remote PDF with PHP in Google Chrome
- automationanywhere - Automation Anywhere - 任务不会在注销状态下执行
- java - 为密钥始终不同的 json 文件创建 Java 对象
- php - Laravel5.7 php 中的 Google 身份验证并出现“缺少必需参数:代码”错误 400
- sql-server - 复制或备份和恢复 SQL Server 数据库?
- php - 下载 XML 并添加到数据库
- java - 如何在 Selenium 的页面对象模型中处理动态元素?