【问题标题】:ECS Fargate batch job tasks via airflow waiting in pending state too longECS Fargate 批处理作业任务通过气流在挂起状态等待太久
【发布时间】:2022-01-13 20:51:48
【问题描述】:

我想并行运行 1000 个任务。这些是短期运行的批处理作业,它们使用相同的 taskdef(因此是相同的容器),只是传递的 args 不同(基本上传递的 arg 是从 0 到 999 的值)。 正如这里所解释的那样,我使用气流循环调用 ECSOperator:
https://headspring.com/2020/06/17/airflow-parallel-tasks/.
当我在 AWS 中查看我的 ECS 集群的“任务”选项卡时,我看到队列中的任务混合了 PROVISIONING、PENDING 和 RUNNING。 RUNNING 作业只是少数 - 大多数任务处于 PENDING 状态,最终进入 RUNNING 状态。

问题:

  1. 为什么大多数作业处于 PENDING 状态?他们在等什么(比如对 RUNNING 工作的限制?)?我如何检查它在此 PENDING 状态期间正在做什么?
  2. 为什么 RUNNING 作业很少?我怎样才能使大多数(如果不是全部)任务同时进入 RUNNING 状态?使用 Fargate 时可以同时运行的作业数量是否有限制?
  3. “服务”选项卡是空的 - 我没有配置任何服务 - 这是否仅适用于长时间运行的作业/守护程序,或者像我这样的批处理作业也可以利用它(并达到获得所有 1000 个任务的目标同时运行)?
  4. 我没有在“容量提供程序”选项卡中设置任何内容。这是否有助于让更多任务并行运行?
  5. 我不清楚这里的自动缩放概念 - Fargate 是否应该在需要时提供 1000 个 CPU 以便所有这些任务可以并行运行?是否有默认限制,如果有,我该如何控制?

【问题讨论】:

    标签: python airflow amazon-ecs aws-fargate


    【解决方案1】:

    要解压的东西太多了。

    1-2:需要考虑 TPS(每秒任务数)供应吞吐量。我们 (AWS) 正在更好地记录这些限制(我们今天不这样做),但对于 1000 个任务,认为预计需要“几分钟”才能使所有这些限制处于 RUNNING 状态。如果您看到他们需要“几个小时”才能进入 RUNNING 状态,那是不正常的。另请注意,每个帐户/区域的默认 concurrent task limit 为 1000(不要与可扩展到 1000 个并发运行任务的吞吐量混淆)。

    3:不。正如您所说,这只是用于控制循环,因此您可以说我总是想运行 n 个任务(或 DAEMONS),而 ECS 会这样做。您实际上是在使用管理任务的外部控制回路(气流)。这不会对吞吐量产生任何影响。

    4:不(或者至少我不这么认为)。如果 Airflow 支持使用 CP 启动任务而不是传统的“启动类型”模式,您可以尝试。

    5:自动缩放器(在 Fargate 的上下文中)几乎是一个 ECS 服务构造(参见第 3 点)。你基本上说“我想在 n 和 m 个任务之间运行,并根据这些指标进行扩展/扩展”。而 ECS/Autoscaling 将使任务计数基于此波动。正如我所说,您正在单独执行所有这些外部启动任务。如果 Airflow 说“启动 1000 个任务”,则没有自动缩放……只是急于从 0 到 1000(参见 #1 和 #2)。

    【讨论】:

    • 1-2。我看到所有作业进入 RUNNING 状态肯定需要一个多小时。在 1000 个任务中,大约 8 个进入 PENDING 状态,大约 4 个处于 RUNNING 状态,大约 10 个处于 PROVISIONING 状态一次。我认为大多数工作都是“排队”的。为什么会这样?有什么我可以提供的信息可以帮助我解决问题吗? 3. 澄清一下,“服务”选项卡本质上是为守护程序设计的,对吧? (即不适用于短期批处理作业)
    • 4.那么如何将容量提供程序用于批处理作业? (根据您的回答)。 5. 谢谢 - 这是有道理的。关于自动缩放的一般性问题:在升级时配置新 CPU 不会浪费时间吗?
    • 1-2 “一次”有多长?您描述的批处理对我来说很有意义,但我希望像这样的批处理的“一次”频率是“几秒钟”而不是“几分钟”。如果您想加快此故障排除速度,您可能应该开一张票。 3. 守护进程和长时间运行的任务(例如,启动由 3 个任务支持的 Web 服务并保持它们正常运行)。
    • 4 个 CP 与您运行的工作负载类型(一次性任务或服务)正交。 CP 只是获取容量的一种方式。这只是您在启动任务时使用的不同语法。这对于在 EC2 上运行它们比在 Fargate 上运行它们更重要
    • 5.是的,但您不需要考虑一次性运行 1000 个任务的上下文中的自动缩放。您需要在“我有一个需要有 2 到 10 个任务的服务,根据实际使用情况进行调整”的上下文中考虑它(在低负载时您将有 2 个任务在超高负载时您将有 10 -以及介于两者之间的所有内容)
    猜你喜欢
    • 1970-01-01
    • 2020-09-09
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多