Tutoriel suivant sur le flux d’air ici .
Problème: le serveur Web renvoie l'erreur suivante
Broken DAG: [/usr/local/airflow/dags/test_operator.py] cannot import name
MyFirstOperator
Notes: La structure du répertoire ressemble à ceci:
airflow_home
├── airflow.cfg
├── airflow.db
├── dags
│ └── test_operators.py
├── plugins
│ └── my_operators.py
└── unittests.cfg
J'essaie d'importer le plugin dans 'test_operators.py' comme ceci:
from airflow.operators import MyFirstOperator
Le code est identique à ce que l'on trouve dans le tutoriel.
J'ai redémarré le serveur Web et maintenant tout fonctionne bien.
Voici ce que je pense aurait pu se passer:
Je suppose que l’erreur de l’étape 1 a en quelque sorte affecté l’étape 2.
Dans l'article, cela ressemble à ceci:
class MyFirstPlugin(AirflowPlugin):
name = "my_first_plugin"
operators = [MyFirstOperator]
Utilisez plutôt:
class MyFirstPlugin(AirflowPlugin):
name = "my_first_plugin"
operators = [MyFirstOperator]
# A list of class(es) derived from BaseHook
hooks = []
# A list of class(es) derived from BaseExecutor
executors = []
# A list of references to inject into the macros namespace
macros = []
# A list of objects created from a class derived
# from flask_admin.BaseView
admin_views = []
# A list of Blueprint object created from flask.Blueprint
flask_blueprints = []
# A list of menu links (flask_admin.base.MenuLink)
menu_links = []
Aussi, n'utilisez pas:
from airflow.operators import MyFirstOperator
Selon l'article de flux d'air sur les plugins, il devrait être:
from airflow.operators.my_first_plugin import MyFirstOperator
Si cela ne fonctionne pas, essayez:
from airflow.operators.my_operators import MyFirstOperator
Si cela ne fonctionne pas, consultez le journal de votre serveur Web au démarrage pour plus d'informations.
J'utilise airflow 1.10 . S'il s'agit d'un opérateur personnalisé que vous souhaitez importer, vous pouvez le télécharger dans le dossier des plug-ins de flux d'air, puis dans le DAG, spécifiez l'importation comme suit:
de [nom du fichier] import [nom de la classe]
où: filename est le nom de votre fichier de plugin classname est le nom de votre classe.
Par exemple: Si le nom de votre fichier est my_first_plugin et le nom de la classe est MyFirstOperator , L'importation serait:
de my_first_plugin import MyFirstOperator
Travaillé pour moi car j'utilise airflow 1.10
Merci ! J'espère que cela t'aides !!
Selon les docs -
Les modules python du dossier plugins sont importés et les points d'ancrage, opérateurs, capteurs, macros, exécuteurs et vues Web s'intègrent aux collections principales d'Airflow et deviennent disponibles.
et fonctionne bien dans la version 1.10.1
J'ai dû mettre à jour le chemin du plugin dans le fichier airflow.cfg
afin de résoudre le problème.
Où sont stockés vos plugins Airflow:
plugins_folder = /airflow/plugins
J'ai rencontré la même erreur en suivant ces tutoriels .
Cependant, ma faute était que j’avais utilisé le caractère espace ' '
dans task_id
, qui n’est pas pris en charge par Airflow
.
Clairement, l'erreur n'a pas indiqué le problème réel. Redémarrez à la fois les flux scheduler
et webserver
d'Airflow, puis affiche le message d'erreur correct sur WebUI.