web-dev-qa-db-ja.com

Airflow DAGの並列処理または同時実行を制御するにはどうすればよいですか?

一部のAirflowインストールでは、スケジューラーが完全にロードされていなくても、実行がスケジュールされているDAGまたはタスクが実行されません。同時に実行できるDAGまたはタスクの数を増やすにはどうすればよいですか?

同様に、インストールの負荷が高く、Airflowワーカーがキューに入れられたタスクをプルする速度を制限したい場合、何を調整できますか?

9
hexacyanide

以下は、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 runs にわたって)
  • core.non_pooled_task_slot_count:プールで実行されていないタスクに割り当てられたタスクスロットの数
  • core.max_active_runs_per_dag:DAGあたりのアクティブなDAGの最大数 runs
  • scheduler.max_threads:スケジューラプロセスがDAGのスケジュールに使用するスレッドの数
  • celery.worker_concurrency:CeleryExecutorを使用している場合にワーカーが実行するタスクインスタンスの数
  • celery.sync_parallelism:CeleryExecutorがタスクの状態を同期するために使用する必要があるプロセスの数
21
hexacyanide

core.executorが使用されている気流構成を確認します。 SequentialExecutorは順次実行されるため、タスクを並列実行するLocal ExecutorまたはClery Executorを選択できます。その後、@ hexacyanideで言及されている他のオプションを使用できます

1
Salman Faris