it-swarm.com.ru

Планирование сценариев Python в потоке воздуха

Всем привет,

Мне нужно запланировать мой python files (который содержит извлечение данных из sql и некоторые объединения) с использованием воздушного потока. Я успешно установил поток воздуха на свой сервер Linux, и веб-сервер потока доступен со мной. Но даже после ознакомления с документацией мне неясно, где именно мне нужно написать сценарий для планирования и как этот сценарий будет доступен на веб-сервере airflow, чтобы я мог видеть его состояние 

Что касается конфигурации, я знаю, где находится папка dag в моем домашнем каталоге, а также где находятся примеры dag.

Примечание: Пожалуйста, не отмечайте это как дубликат с Как запустить файл скрипта bash в Airflow, так как мне нужно запускать файлы python, лежащие в другом месте.

Пожалуйста, найдите конфигурацию в веб-сервере Airflow как:

 enter image description here

Ниже приведен скриншот папки dag в директории AIRFLOW_HOME

 enter image description here

Также найдите скриншот ниже для создания скриншота DAG и ошибки Missing DAG

 enter image description here

 enter image description here

После того, как я выбрал simple DAG, появляется следующая ошибка отсутствия DAG

 enter image description here

4
Abhishek Pansotra

Вы также можете использовать bashoperator для выполнения скриптов Python в Airflow. Вы можете поместить свои скрипты в папку в папке DAG. Если ваши сценарии находятся где-то еще, просто укажите путь к этим сценариям.

    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)
6
liferacer

Вам, вероятно, следует использовать PythonOperator для вызова вашей функции. Если вы хотите определить функцию где-то еще, вы можете просто импортировать ее из модуля, если она доступна в вашей 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'})

Если ваша функция my_python_function была в файле скрипта /path/to/my/scripts/dir/my_script.py

Затем, перед запуском Airflow, вы можете добавить путь к своим сценариям в PYTHONPATH следующим образом:

export PYTHONPATH=/path/to/my/scripts/dir/:$PYTHONPATH

Более подробная информация здесь: https://airflow.incubator.Apache.org/code.html#airflow.operators.PythonOperator

Аргументы по умолчанию и другие соображения, как в учебнике: https://airflow.incubator.Apache.org/tutorial.html

6
postrational
  1. Установите воздушный поток, используя официальную документацию Airflow. Его хорошая идея установить в виртуальной среде Python . http://python-guide-pt-br.readthedocs.io/en/latest/dev/virtualenvs/
  2. Когда мы начинаем поток воздуха в первый раз, используя 

airflow webserver -p <port>

Загружает примеры дагс автоматически, его можно отключить в $ HOME/airflow/airflow.cfg

`load_examples = False`
  1. Создайте папку dags в $ HOME/airflow /, поместите файл tutorial.py в папку dags из https://airflow.incubator.Apache.org/tutorial.html
  2. Проведите несколько экспериментов, внесите изменения в tutorial.py. Если вы предоставляете schedule_interval в качестве синтаксиса cron, тогда 'start_date' : datetime(2017, 7, 7)

    'start_date': datetime.now()
    

    dag = DAG('tutorial', default_args=default_args,schedule_interval="@once") или dag = DAG('tutorial', default_args=default_args,schedule_interval="* * * * *") # schedule each minute 

  3. начать воздушный поток: $ airflow webserver -p <port> 

  4. запустить планировщик: $ airflow scheduler
1
Sandhyalal Kumar

Airflow анализирует все файлы Python в $ AIRFLOW_HOME/dags (в вашем случае/home/amit/airflow/dags). И этот скрипт на Python должен вернуть объект DAG обратно, как показано в ответе из «Пострациональный». Теперь, когда об этом сообщают как о пропавшем, это означает, что есть некоторая проблема в коде Python, и Airflow не может загрузить его. Более подробную информацию можно найти в журналах веб-сервера или планировщика воздушного потока, поскольку там указываются stderr или stdout.

1
user7126545