在单个气流dag中可以安排多少任务?

时间:2018-06-07 09:31:13

标签: airflow

我对气流完全不熟悉,并且无法找到可以在单个气流DAG中安排多少任务的任何地方。并且每项任务的最大尺寸。

我想安排一个任务,该任务应该能够处理数百万个查询并识别其类型并根据查询类型安排下一个任务。

阅读完整的文档,但找不到它

2 个答案:

答案 0 :(得分:6)

单个DAG中可以包含多少任务是没有限制的。

通过Airflow配置,您可以设置执行时间的并发限制,例如总体并行任务的最大数量,给定DAG的最大并发DAG运行次数等。气流级别的设置,DAG级别,和操作员级别,以实现更粗略到细粒度的控制。

以下是您可以调整的高级并发设置:

# The amount of parallelism as a setting to the executor. This defines
# the max number of task instances that should run simultaneously
# on this airflow installation
parallelism = 32

# The number of task instances allowed to run concurrently by the scheduler
dag_concurrency = 16

# Are DAGs paused by default at creation
dags_are_paused_at_creation = True

# When not using pools, tasks are run in the "default pool",
# whose size is guided by this config element
non_pooled_task_slot_count = 128

# The maximum number of active DAG runs per DAG
max_active_runs_per_dag = 16

参考:default_airflow.cfg

this answer中更详细地描述了并行设置。 至于最大尺寸"对于每项任务,我假设您指的是资源分配,例如内存或CPU。这是用户可配置的,具体取决于您选择使用的执行程序:

  • 例如,在使用LocalExecutor的简单设置中,它将使用主机上可用的任何资源。
  • 相反,另一方面,使用MesosExecutor,可以定义将分配给任务实例的最大CPU和/或内存量,通过DockerOperator,您还可以使用CeleryExecutor用于定义给定任务实例将使用的最大CPU和内存量的选项。
  • 使用worker_concurrency,您可以设置ls -1 "$MyDir" | sort -hr | head -n 1 来定义每个工作人员将要执行的任务实例数。

限制执行的另一种方法是使用Pools功能(example),例如,您可以将与数据库通信的任务池的最大大小设置为5以防止超过一次点击它就可以完成5个任务(并且可能会使数据库/ API /您想要汇集的任何资源超载)。

答案 1 :(得分:0)

使用 concurrency 参数可以让您控制允许 DAG 拥有多少个运行任务实例,超过该点时,事情就会排队。 这个来自气流网站的 FAQ 提供了关于任务调度的非常有价值的信息。

最后,关于任务的大小,Airflow 方面没有限制。 Airflow 提出的唯一软要求是创建幂等任务。所以基本上正如 Taylor 上面解释的那样,任务大小受 executor - 您将选择的工作人员(Kubernetes、Celery、Dask 或本地)以及您的工作人员可用的资源的限制。