MWAA Airflow Scaling:当我不得不 运行 频繁且耗时的脚本时我该怎么办? (Negsignal.SIGKILL)
MWAA Airflow Scaling: what do I do when I have to run frequent & time consuming scripts? (Negsignal.SIGKILL)
我的 AWS 账户中有一个 MWAA Airflow 环境。我设置的DAG应该从S3 bucket A中读取大量数据,过滤我想要的并将过滤后的结果转储到S3 bucket 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 class 扩展到 mw1.large
有 15 个工人,在错误出现之前可以完成更多的工作,但仍然赶不上每分钟摄取的速度. Negsignal.SIGKILL
错误在达到 worker 机器最大值之前仍然会显示。
此时,我应该怎么做才能缩放呢?我可以想象打开另一个 Airflow 环境,但这并没有什么意义。必须有一种方法可以在一个环境中完成。
我找到了解决方案,对于 MWAA,编辑环境并在 Airflow configuration options
下设置这些配置
- celery.sync_parallelism = 1
- celery.worker_autoscale = 1,1
这将确保您的 worker 机器一次运行 1 个作业,防止多个作业共享 worker,从而节省内存并减少运行时间。
我的 AWS 账户中有一个 MWAA Airflow 环境。我设置的DAG应该从S3 bucket A中读取大量数据,过滤我想要的并将过滤后的结果转储到S3 bucket 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 class 扩展到 mw1.large
有 15 个工人,在错误出现之前可以完成更多的工作,但仍然赶不上每分钟摄取的速度. Negsignal.SIGKILL
错误在达到 worker 机器最大值之前仍然会显示。
此时,我应该怎么做才能缩放呢?我可以想象打开另一个 Airflow 环境,但这并没有什么意义。必须有一种方法可以在一个环境中完成。
我找到了解决方案,对于 MWAA,编辑环境并在 Airflow configuration options
下设置这些配置
- celery.sync_parallelism = 1
- celery.worker_autoscale = 1,1
这将确保您的 worker 机器一次运行 1 个作业,防止多个作业共享 worker,从而节省内存并减少运行时间。