Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Cette page fournit des étapes de dépannage et des informations sur les problèmes courants liés au déclencheur Airflow.
Opérations bloquantes dans le déclencheur
Les tâches asynchrones peuvent parfois être bloquées dans les déclencheurs. Dans la plupart des cas, les problèmes proviennent de ressources de déclencheur insuffisantes ou de problèmes liés au code d'opérateur asynchrone personnalisé.
Les journaux du déclencheur affichent tous les messages d'avertissement qui peuvent vous aider à identifier les causes des performances réduites du déclencheur. Il existe deux avertissements importants à rechercher.
Thread asynchrone bloqué
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.
Cet avertissement signale des problèmes de performances dus à un volume élevé de tâches asynchrones.
Solution: Pour résoudre ce problème, d'allouer plus de ressources aux déclencheurs réduire le nombre de tâches différées exécutées en même temps, ou augmenter le nombre de déclencheurs dans votre environnement. Gardez à l'esprit que même si les déclencheurs gèrent des tâches différables, les nœuds de calcul chargés du démarrage accomplissent chaque tâche. Si vous ajustez le nombre de déclencheurs, envisagez également d'ajuster le nombre d'instances de nœuds de calcul.
Une tâche spécifique a bloqué le thread asynchrone.
WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/my-custom-code.py:609> result=None> took 0.401 second
Cet avertissement renvoie vers un extrait de code d'opérateur spécifique exécuté par Cloud Composer. De par leur conception, les déclencheurs doivent s'appuyer sur la bibliothèque
asyncio
des opérations en arrière-plan. Une implémentation personnalisée d'un déclencheur peut ne pas respecter correctement les contratsasyncio
(par exemple, en raison d'une utilisation incorrecte des mots clésawait
etasync
dans le code Python).Solution: inspectez le code signalé par l'avertissement et vérifiez si le l'opération asynchrone est correctement implémentée.
Trop de déclencheurs
Le nombre de tâches différées est visible dans la métrique task_count
, qui est
également affiché dans le tableau de bord Monitoring de votre environnement. Chaque déclencheur
crée des ressources telles que des connexions à des ressources externes, qui consomment
mémoire.
Les graphiques de consommation de mémoire et de processeur indiquent que des ressources insuffisantes provoquent des redémarrages, car la vérification d'activité échoue en raison d'absence de battements cardiaques :
Solution : Pour résoudre ce problème, allouez plus de ressources aux déclencheurs, réduisez le nombre de tâches différées exécutées en même temps ou augmentez le nombre de déclencheurs dans votre environnement.
Plantage d'un nœud de calcul Airflow lors de l'exécution du rappel
Une fois l'exécution terminée, le contrôle revient à un worker Airflow, qui exécute une méthode de rappel à l'aide d'un emplacement d'exécution. Cette phase est contrôlée par l'exécuteur Celery. Par conséquent, les limites de configuration et de ressources correspondantes s'appliquent (par exemple, parallelism
ou worker_concurrency
).
Si la méthode de rappel échoue dans le nœud de calcul Airflow, celui-ci échoue ou
Le nœud de calcul qui exécute la méthode redémarre, la tâche est marquée comme FAILED
. Dans ce cas, l'opération de nouvelle tentative réexécute l'ensemble de la tâche, et non seulement la méthode de rappel.
Boucle infinie dans un déclencheur
Il est possible d'implémenter un opérateur de déclencheur personnalisé de sorte qu'il bloque entièrement la boucle principale du déclencheur, de sorte que seul le déclencheur défaillant est exécutés à l'époque. Dans ce cas, un avertissement est généré dans les journaux du déclencheur une fois le déclencheur problématique terminé.
Classe de déclencheur introuvable
Étant donné que le dossier DAGs n'est pas synchronisé avec le déclencheur Airflow, le code du déclencheur intégré est manquant lorsque le déclencheur est exécuté. L'erreur est générée dans les journaux de la tâche ayant échoué :
ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class
Solution: importez le code manquant à partir de PyPI.
Message d'avertissement concernant le déclencheur dans l'interface utilisateur d'Airflow
Dans certains cas, une fois le déclencheur désactivé, le message d'avertissement suivant peut s'afficher dans l'interface utilisateur d'Airflow :
The triggerer does not appear to be running. Last heartbeat was received
4 hours ago. Triggers will not run, and any deferred operator will remain
deferred until it times out or fails.
Airflow peut afficher ce message, car il reste des déclencheurs incomplets dans Airflow base de données. Ce message signifie généralement que le déclencheur a été désactivé avant que dans votre environnement.
Vous pouvez afficher tous les déclencheurs exécutés dans l'environnement en consultant la page Parcourir > Déclencheurs dans l'interface utilisateur Airflow (le rôle Admin
est requis).
Solutions :
- Réactivez le déclencheur et attendez que tâches différées à effectuer.
- Accéder à la base de données Airflow et supprimer des déclencheurs incomplets manuellement.
Les tâches restent à l'état "Différé" après la désactivation du déclencheur
Lorsque le déclencheur est désactivé, les tâches qui sont déjà à l'état "différée" restent dans cet état jusqu'à ce que le délai avant expiration soit atteint. Ce délai avant expiration peut être infini, en fonction de la configuration d'Airflow et du DAG.
Utilisez l'une des solutions suivantes :
- Marquer manuellement les tâches comme ayant échoué.
- Activez le déclencheur pour effectuer les tâches.
Nous vous recommandons de ne désactiver le déclencheur que si votre environnement n'exécute aucun opérateur ni aucune tâche différée, et que toutes les tâches différées sont terminées.