web-dev-qa-db-fra.com

Python planification de script dans airflow

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.

Veuillez trouver la configuration dans le serveur Web Airflow comme:

enter image description here

Ci-dessous, la capture d'écran du dossier dag dans le répertoire AIRFLOW_HOME

enter image description here

Retrouvez également la capture d'écran ci-dessous pour la capture d'écran de la création du DAG et l'erreur DAG manquante

enter image description here

enter image description here

Après avoir sélectionné le simple DAG suite à l'erreur du DAG manquant est remplie

enter image description here

10
Abhishek Pansotra

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

12
postrational

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)
8
liferacer
  1. Installez airflow à l'aide de la documentation officielle d'Airflow. C'est une bonne idée d'installer dans python environnement virtuel. http://python-guide-pt-br.readthedocs.io/en/latest/dev/virtualenvs/
  2. Lorsque nous démarrons le flux d'air pour la première fois en utilisant

airflow webserver -p <port>

Il charge les exemples automatiquement, il peut être désactivé dans $ HOME/airflow/airflow.cfg

`load_examples = False`
  1. Créer dossier dags dans $ HOME/airflow /, mettre le fichier tutorial.py dans dags dossier de https://airflow.incubator.Apache.org/tutorial.html
  2. 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

  3. démarrer le flux d'air: $ airflow webserver -p <port>

  4. démarrer le planificateur: $ airflow scheduler
0
Siddharth Kumar

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.

0
user7126545