web-dev-qa-db-fra.com

Le flux d'air 1.10.3 Subdag ne peut exécuter que 1 tâche en parallèle même la concurrence est de 8

Récemment, je met à niveau le flux d'air de 1,9 à 1,10,3 (la plus tard).

Cependant, je remarque une question de performance liée à la concurrence du sous-div. Seule une tâche à l'intérieur du sous-division peut être ramassée, ce qui n'est pas la façon dont il devrait être, notre réglage de la concurrence pour le sous-distributeur est 8.

Voir ce qui suit: get_monthly_summary-214 et get_monthly_summary-215 Sont les deux sous-traits, il peut être exécuté dans un contrôleur parallèle par la concurrence du DAG parent

enter image description here

Mais quand zoomez dans le sous-bille dire get_monthly_summary-214, ensuite enter image description here Vous pouvez certainement voir qu'il n'y a que 1 tâche qui fonctionne à la fois, les autres sont en file d'attente et continue de fonctionner de cette manière. Lorsque nous vérifions la simultanéité des sous-stages, il est en fait 8 comme indiqué dans le code: enter image description here

Nous installons la taille des machines à sous la piscine, il est 32, nous avons 8 travailleurs de céleri pour récupérer la tâche en file d'attente et notre configuration de flux d'air associée à la concurrence est la suivante:

# 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

# The app name that will be used by celery
celery_app_name = airflow.executors.celery_executor

# The concurrency that will be used when starting workers with the
# "airflow worker" command. This defines the number of task instances that
# a worker will take, so size up your workers based on the resources on
# your worker box and the nature of your tasks
worker_concurrency = 16

Aussi, tout le sous-div est configuré à l'aide de la file d'attente appelée mini _, tandis que toutes ses tâches internes sont la file d'attente par défaut appelée default, car nous pourrions peut-être certains problèmes d'impasse Exécuter à la fois l'opérateur de sous-fi et subdag les tâches internes sur la même file d'attente. J'ai également essayé d'utiliser la file d'attente default pour toutes les tâches et exploitants, cela n'aide pas.

L'ancienne version 1.9 semble être une amende pour que chaque subdag puisse exécuter plusieurs tâches en parallèle, n'avons-nous rien manqué?

10
Kevin Li

Merci!. J'ai changé un peu le code du dernier flux d'air (1.10.5) getDefaultEcutor ne fonctionne plus:

from airflow.executors.celery_executor import CeleryExecutor

def sub_dag_operator_with_celery_executor(subdag, *args, **kwargs):
return SubDagOperator(subdag=subdag, executor=CeleryExecutor(), *args, 
**kwargs)
1
Ohad Mata