Dans certaines de mes installations Airflow, les DAG ou les tâches dont l'exécution est planifiée ne s'exécutent pas même lorsque le planificateur n'est pas entièrement chargé. Comment puis-je augmenter le nombre de DAG ou de tâches pouvant s'exécuter simultanément?
De même, si mon installation est sous forte charge et que je souhaite limiter la vitesse à laquelle mes employés Airflow extraient les tâches en file d'attente, que puis-je ajuster?
Voici une liste étendue des options de configuration disponibles dans Airflow v1.10.2. Certains peuvent être définis sur une base par DAG ou par opérateur, et peuvent revenir aux paramètres par défaut de la configuration s'ils ne sont pas spécifiés.
Options pouvant être spécifiées par DAG :
concurrency
: le nombre d'instances de tâches autorisées à s'exécuter simultanément sur toutes les exécutions actives du DAG sur lequel il est défini. Par défaut à core.dag_concurrency
si non définimax_active_runs
: nombre maximal d'exécutions actives pour ce DAG. Le planificateur ne créera pas de nouvelles exécutions DAG actives une fois cette limite atteinte. Par défaut à core.max_active_runs_per_dag
si non définiExemples:
# 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)
Options pouvant être spécifiées par opérateur :
pool
: le pool dans lequel exécuter la tâche. Pools peut être utilisé pour limiter le parallélisme pour seulement un sous-ensemble de tâchestask_concurrency
: limite de concurrence par niveau de tâcheExemple:
t1 = BaseOperator(pool='my_custom_pool', task_concurrency=12)
Options spécifiées sur l'ensemble d'une configuration Airflow :
core.parallelism
: nombre maximal de tâches exécutées sur une installation Airflow entièrecore.dag_concurrency
: nombre maximal de tâches pouvant être exécutées par DAG (sur plusieurs DAG s'exécute)core.non_pooled_task_slot_count
: nombre d'emplacements de tâches alloués aux tâches non exécutées dans un poolcore.max_active_runs_per_dag
: nombre maximum de DAG actifs s'exécute, par DAGscheduler.max_threads
: combien de threads le processus du planificateur doit utiliser pour planifier les DAGcelery.worker_concurrency
: nombre d'instances de tâches qu'un travailleur prendra si vous utilisez CeleryExecutorcelery.sync_parallelism
: nombre de processus que CeleryExecutor doit utiliser pour synchroniser l'état des tâchesVérifiez la configuration du flux d'air pour laquelle core.executor est utilisé. SequentialExecutor s'exécutera séquentiellement, vous pouvez donc choisir Local Executor ou Clery Executor qui exécutent la tâche en parallèle. Après cela, vous pouvez utiliser d'autres options comme mentionné par @hexacyanide