J'utilise airflow pour orchestrer certains scripts python. J'ai un dag "principal" à partir duquel plusieurs sous-dags sont exécutés. Mon dag principal est censé fonctionner selon l'aperçu suivant:
J'ai réussi à accéder à cette structure dans mon fichier principal en utilisant les lignes suivantes:
etl_internal_sub_dag1 >> etl_internal_sub_dag2 >> etl_internal_sub_dag3
etl_internal_sub_dag3 >> etl_adzuna_sub_dag
etl_internal_sub_dag3 >> etl_adwords_sub_dag
etl_internal_sub_dag3 >> etl_facebook_sub_dag
etl_internal_sub_dag3 >> etl_pagespeed_sub_dag
etl_adzuna_sub_dag >> etl_combine_sub_dag
etl_adwords_sub_dag >> etl_combine_sub_dag
etl_facebook_sub_dag >> etl_combine_sub_dag
etl_pagespeed_sub_dag >> etl_combine_sub_dag
Ce que je veux que airflow fasse, c'est d'abord lancer le etl_internal_sub_dag1
puis le etl_internal_sub_dag2
puis le etl_internal_sub_dag3
. Quand le etl_internal_sub_dag3
est terminé je veux etl_adzuna_sub_dag
, etl_adwords_sub_dag
, etl_facebook_sub_dag
, et etl_pagespeed_sub_dag
pour fonctionner en parallèle. Enfin, lorsque ces quatre derniers scripts sont terminés, je veux que le etl_combine_sub_dag
courir.
Cependant, lorsque j'exécute le dag principal, etl_adzuna_sub_dag
, etl_adwords_sub_dag
, etl_facebook_sub_dag
, et etl_pagespeed_sub_dag
sont exécutés un par un et non en parallèle.
Question: Comment puis-je m'assurer que les scripts etl_adzuna_sub_dag
, etl_adwords_sub_dag
, etl_facebook_sub_dag
, et etl_pagespeed_sub_dag
sont exécutés en parallèle?
Modifier: Mon default_args
et DAG
ressemblent à ceci:
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': start_date,
'end_date': end_date,
'email': ['[email protected]'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 0,
'retry_delay': timedelta(minutes=5),
}
DAG_NAME = 'main_dag'
dag = DAG(DAG_NAME, default_args=default_args, catchup = False)
Vous devrez utiliser LocalExecutor
.
Vérifiez vos configurations (airflow.cfg
), vous utilisez peut-être SequentialExectuor
qui exécute les tâches en série.
Airflow utilise une base de données backend pour stocker les métadonnées. Vérifier votre airflow.cfg
fichier et recherchez le mot clé executor
. Par défaut, Airflow utilise SequentialExecutor
qui exécuterait la tâche séquentiellement quoi qu'il arrive. Ainsi, pour permettre à Airflow d'exécuter des tâches en parallèle, vous devrez créer une base de données dans Postges ou MySQL et la configurer dans airflow.cfg
(sql_alchemy_conn
param), puis changez d'exécuteur en LocalExecutor
dans airflow.cfg
puis exécutez airflow initdb
.
Notez que pour utiliser LocalExecutor
, vous devez utiliser Postgres ou MySQL au lieu de SQLite comme base de données principale.
Plus d'informations: https://airflow.incubator.Apache.org/howto/initialize-database.html
Si vous souhaitez faire un véritable essai routier d'Airflow, vous devriez envisager de configurer un véritable backend de base de données et de passer à LocalExecutor. Comme Airflow a été conçu pour interagir avec ses métadonnées à l'aide de la grande bibliothèque SqlAlchemy, vous devriez pouvoir utiliser n'importe quel backend de base de données pris en charge en tant que backend SqlAlchemy. Nous vous recommandons d'utiliser MySQL ou Postgres.