Salut tout le monde,
J'ai besoin de planifier mes fichiers python (qui contient l'extraction de données à partir de SQL et de certaines jointures) en utilisant airflow. J'ai avec succès installé airflow sur mon serveur linux et le serveur web d'airflow est disponible avec moi. Mais même après avoir parcouru la documentation, je ne sais pas où exactement je dois écrire un script pour la planification et comment ce script sera-t-il disponible dans le serveur Web airflow pour que je puisse voir le statut
En ce qui concerne la configuration, je sais où se trouve le dossier dag dans mon répertoire personnel et où se trouvent les exemples de dags.
Remarque: Veuillez ne pas marquer ceci comme doublon avec Comment exécuter le fichier de script bash dans Airflow car j'ai besoin d'exécuter python fichiers se trouvant dans un emplacement différent.
Vous devriez probablement utiliser le PythonOperator
pour appeler votre fonction. Si vous voulez définir la fonction ailleurs, vous pouvez simplement l'importer depuis un module tant qu'elle est accessible dans votre PYTHONPATH
.
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from my_script import my_python_function
dag = DAG('tutorial', default_args=default_args)
PythonOperator(dag=dag,
task_id='my_task_powered_by_python',
provide_context=False,
python_callable=my_python_function,
op_args=['arguments_passed_to_callable'],
op_kwargs={'keyword_argument':'which will be passed to function'})
Si votre fonction my_python_function
était dans un fichier de script /path/to/my/scripts/dir/my_script.py
Avant de démarrer Airflow, vous pouvez ajouter le chemin d'accès à vos scripts dans le PYTHONPATH
comme ceci:
export PYTHONPATH=/path/to/my/scripts/dir/:$PYTHONPATH
Plus d'informations ici: https://airflow.incubator.Apache.org/code.html#airflow.operators.PythonOperator
Arguments par défaut et autres considérations comme dans le tutoriel: https://airflow.incubator.Apache.org/tutorial.html
Vous pouvez également utiliser bashoperator pour exécuter des scripts python dans Airflow. Vous pouvez placer vos scripts dans un dossier dans le dossier DAG. Si vos scripts sont ailleurs, donnez simplement un chemin d'accès à ces scripts.
from airflow import DAG
from airflow.operators import BashOperator,PythonOperator
from datetime import datetime, timedelta
seven_days_ago = datetime.combine(datetime.today() - timedelta(7),
datetime.min.time())
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': seven_days_ago,
'email': ['[email protected]'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
)
dag = DAG('simple', default_args=default_args)
t1 = BashOperator(
task_id='testairflow',
bash_command='python /home/airflow/airflow/dags/scripts/file1.py',
dag=dag)
airflow webserver -p <port>
Il charge les exemples automatiquement, il peut être désactivé dans $ HOME/airflow/airflow.cfg
`load_examples = False`
Faites quelques expériences, apportez des modifications dans tutorial.py. Si vous donnez schedule_interval comme syntaxe cron, alors 'start_date' : datetime(2017, 7, 7)
'start_date': datetime.now()
dag = DAG('tutorial', default_args=default_args,schedule_interval="@once")
ou dag = DAG('tutorial', default_args=default_args,schedule_interval="* * * * *") # schedule each minute
démarrer le flux d'air: $ airflow webserver -p <port>
$ airflow scheduler
Airflow analyse tous les fichiers Python dans $ AIRFLOW_HOME/dags (dans votre cas/home/amit/airflow/dags). Et que le script python devrait annuler un DAG) renvoyer l'objet comme indiqué dans la réponse de "postrational". Maintenant, lorsqu'il est signalé comme manquant, cela signifie qu'il y a un problème dans Python et Airflow n'ont pas pu le charger. Vérifiez les journaux du serveur Web ou du planificateur d'airflow. pour plus de détails, comme stderr ou stdout s'y rend.