在Airflow上并行处理一百万个文件的列表

时间:2019-04-24 12:05:09

标签: python multiprocessing airflow

我有一个ETL管道,该管道包括以下任务:

  1. 爬行网站以收集指向csv文件的网址
  2. 从步骤1的网址中下载所有文件
  3. 处理在步骤2中下载的每个文件

每个步骤都有一个python函数,我们称它们为{f1,f2,f3}

通过multiprocessing模块和Pool.map调用,我可以为两个n processes触发f2, f3

我正在将整个脚本转换为Airflow DAG。我的问题是假设有上百万个文件,我想特别在第3步中使用整个Celery工人集群来并行处理文件。

例如,假设我有100个celery worker节点,每个节点有2个核心,这给了我200个核心-我想并行处理至少100个文件。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

气流可以用于数千个动态任务,但不能。气流DAG应该相当稳定。例如,您仍然可以使用Airflow来处理全部数据,并在以后的ETL流程中使用此信息。

大量动态任务可能导致DAG运行如下:

enter image description here

这会在GUI和日志文件中导致很多垃圾信息。

我建议您在Celery library之上构建您的任务系统(不要搞混Airflow中的CeleryExecutor,因为Airflow可以在Celery之上使用)。这是一个任务队列,专注于数百万个实时任务:

  

芹菜用于生产系统中,每天处理数百万个任务。

Celery用Python编写,可用于生产环境,稳定且可扩展性极佳。我认为这是解决您问题的最佳工具。


但是,如果您真的只想使用Airflow,则可以阅读this文章(关于动态DAG生成)和this文章(关于DAG内部的动态任务生成)。