如何控制Airflow DAG的并行性或并发性?

时间:2019-05-30 02:00:28

标签: python airflow google-cloud-composer

在我的某些Airflow安装中,即使未完全加载调度程序,调度运行的DAG或任务也不会运行。如何增加可以同时运行的DAG或任务的数量?

类似地,如果我的安装处于高负荷状态,并且我想限制Airflow工作人员拉出排队任务的速度,我该如何调整?

3 个答案:

答案 0 :(得分:6)

答案 1 :(得分:1)

以下是Airflow v1.10.2中可用的配置选项的扩展列表。某些可以在每个DAG或每个操作员的基础上进行设置,如果未指定,则可能会退回到设置范围的默认值。


可以在每个DAG基础上指定的选项

  • concurrency:已设置为允许在DAG的所有活动运行中同时运行的任务实例数。如果未设置,则默认为core.dag_concurrency
  • max_active_runs:此DAG的最大活动运行数。一旦达到此限制,调度程序将不会创建新的活动DAG运行。如果未设置,则默认为core.max_active_runs_per_dag

示例:

# Only allow one run of this DAG to be running at any given time
dag = DAG('my_dag_id', max_active_runs=1)

# Allow a maximum of 10 tasks to be running across a max of 2 active DAG runs
dag = DAG('example2', concurrency=10, max_active_runs=2)

可以按每个操作员指定的选项

  • pool:用于在其中执行任务的池。Pools可用于限制仅任务的一个子集的并行性
  • task_concurrency:每个任务级别的并发限制

示例:

t1 = BaseOperator(pool='my_custom_pool', task_concurrency=12)

在整个Airflow设置中指定的选项

  • core.parallelism:整个Airflow安装中运行的最大任务数
  • core.dag_concurrency:每个DAG可以运行的最大任务数(跨多个 DAG运行
  • core.non_pooled_task_slot_count:分配给不在池中运行的任务的任务插槽数
  • core.max_active_runs_per_dag:每个DAG的最大活动DAG运行次数
  • scheduler.max_threads:调度程序进程应使用多少个线程来调度DAG
  • celery.worker_concurrency:如果使用CeleryExecutor,工作人员将执行
  • 的任务实例数
  • celery.sync_parallelism:CeleryExecutor用于同步任务状态的进程数

答案 2 :(得分:0)

检查使用 core.executor 的气流配置。 SequentialExecutor将按顺序执行,因此您可以选择并行执行任务的Local Executor或Clery Executor。 之后,您可以使用@hexacyanide

提到的其他选项。