【发布时间】:2020-09-22 19:58:28
【问题描述】:
我正在从事一个项目,该项目从 AWS S3 获取一组输入数据,对其进行预处理和分割,启动 10K 批处理容器以在 AWS Batch 上并行处理分割数据,对数据进行后聚合,并将其推送到 S3。
我已经有来自其他项目的 Airflow + Batch 软件模式,但还没有处理 10k 并行任务的缩放因子。气流很好,因为我可以查看哪些任务失败并在调试后重试任务。但是在一个 Airflow EC2 实例上处理这么多任务似乎是一个障碍。另一种选择是让一个任务启动 10k 容器并从那里监视它。
我没有使用 Step Functions 的经验,但听说它是 AWS 的 Airflow。 Step Functions + Batch 在线看起来有很多模式。 Step Functions 似乎是检查我的用例的好方法吗?对于失败的作业/重试任务的能力,您是否获得与 Airflow 相同的见解?
【问题讨论】:
-
我对 Airflow 的轶事经验表明,10k 并发任务只会扼杀
scheduler(实际上 2-3k 并发任务就足够了);但在此之前,您会开始对相对较慢的flask前端感到恼火(它不会自动刷新 的东西)。从未探索过 AWS Step Functions,但可以在 Airflow 上给您 2 美分[1] 不要创建单一的 DAG(包含数百个任务):尝试将 DAG 保持在 scheduler 增加额外的工作 -
[2] 设计您的工作流程(任务/操作员)以将 Airflow 用作纯编排器:任务应委派繁重的工作(实际处理)到外部系统(不同于一台气流/它的工作人员正在运行的机器)。这样,您将能够独立于它触发的各种任务来扩展您的 Airflow 部署[3]将您的 DAG(以及其中的单个任务)保持为 immutable跨度>
-
我觉得 Airflow 不能运行这么多并发的事情的主要原因是因为
scheduler本质上是在 polling 上工作的(定期检查哪些任务可以运行,然后运行它们) -
查看 Netflix 使用 AWS Step Functions 的 MetaFlow
-
@sanjayr 看起来像是对协调器的滥用。将处理拆分为子任务应该是处理框架的责任。例如,Airflow 触发一项作业,而 Spark on Glue 或 EMR 在后台将数据拆分为任务,您应该只关心应用程序逻辑
标签: airflow aws-step-functions