【问题标题】:MWAA Airflow Scaling: what do I do when I have to run frequent & time consuming scripts? (Negsignal.SIGKILL)MWAA Airflow Scaling:当我必须运行频繁且耗时的脚本时,我该怎么办? (Negsignal.SIGKILL)
【发布时间】:2026-02-11 06:05:02
【问题描述】:

我的 AWS 账户中有一个 MWAA Airflow 环境。我正在设置的 DAG 应该从 S3 存储桶 A 读取大量数据,过滤我想要的内容并将过滤后的结果转储到 S3 存储桶 B。它需要每分钟读取一次,因为数据每分钟都在进来。每次运行处理大约 200MB 的 json 数据。

我的初始设置是使用 env class mw1.small 和 10 台工作机器,如果我在这个设置中只运行一次任务,每次运行大约需要 8 分钟才能完成,但是当我开始计划每分钟运行一次时,他们中的大多数无法完成,开始需要更长的时间来运行(大约 18 分钟)并显示错误消息:

[2021-09-25 20:33:16,472] {{local_task_job.py:102}} INFO - Task exited with return code Negsignal.SIGKILL

我尝试将 env 类扩展到 mw1.large 有 15 个工作人员,在错误出现之前能够完成更多工作,但仍然无法赶上每分钟摄取的速度。 Negsignal.SIGKILL 错误仍然会在达到工作机器最大值之前显示。

此时,我应该怎么做才能扩大规模?我可以想象打开另一个 Airflow 环境,但这没有任何意义。必须有一种方法可以在一个环境中做到这一点。

【问题讨论】:

  • SIGKILL 表示内存不足。不确定该信息是否有用。
  • @jordanm 嗯,有道理,但在这种情况下,我怎样才能增加内存?我已经在使用 mw1.large,这是 MWAA 提供的最大机器。
  • 是的,您已达到 MWAA 的极限。您可以尝试将您的工作分成更小的块,否则您可以通过自我管理而不是 MWAA 来获得更多带有气流的 RAM。 AWS 胶水也可能适合您的用例。
  • 也可能值得检查local_task_job.py 本身,看看有什么方法可以减少内存使用。 (200M 看起来还不错,但取决于你在里面做什么,它可能非常大)你在这个脚本中使用什么框架?
  • 你好@Emma,我只是在运行 Python 并使用 Boto3 处理 S3 存储桶的东西,不过我刚刚找到了解决方案。谢谢!

标签: amazon-web-services scaling airflow mwaa


【解决方案1】:

我找到了解决方案,对于 MWAA,编辑环境并在 Airflow configuration options 下设置这些配置

  1. celery.sync_parallelism = 1
  2. celery.worker_autoscale = 1,1

这将确保您的 worker 机器一次运行 1 个作业,防止多个作业共享 worker,从而节省内存并减少运行时间。

【讨论】:

  • 仍然对我不起作用。
  • @Cyber​​netic 您可能希望为此联系 AWS 支持。 SIGKILL 包含很多可能出错的可能性。
最近更新 更多