我有一个ETL管道,该管道包括以下任务:
每个步骤都有一个python函数,我们称它们为{f1,f2,f3}
通过multiprocessing
模块和Pool.map
调用,我可以为两个n processes
触发f2, f3
我正在将整个脚本转换为Airflow DAG。我的问题是假设有上百万个文件,我想特别在第3步中使用整个Celery工人集群来并行处理文件。
例如,假设我有100个celery worker节点,每个节点有2个核心,这给了我200个核心-我想并行处理至少100个文件。
我该怎么做?
答案 0 :(得分:0)
气流可以用于数千个动态任务,但不能。气流DAG应该相当稳定。例如,您仍然可以使用Airflow来处理全部数据,并在以后的ETL流程中使用此信息。
大量动态任务可能导致DAG运行如下:
这会在GUI和日志文件中导致很多垃圾信息。
我建议您在Celery library之上构建您的任务系统(不要搞混Airflow中的CeleryExecutor
,因为Airflow可以在Celery之上使用)。这是一个任务队列,专注于数百万个实时任务:
芹菜用于生产系统中,每天处理数百万个任务。
Celery用Python编写,可用于生产环境,稳定且可扩展性极佳。我认为这是解决您问题的最佳工具。
但是,如果您真的只想使用Airflow,则可以阅读this文章(关于动态DAG生成)和this文章(关于DAG内部的动态任务生成)。