Я пытаюсь использовать Airflow для выполнения простого python задачи.
from __future__ import print_function
from airflow.operators.python_operator import PythonOperator
from airflow.models import DAG
from datetime import datetime, timedelta
from pprint import pprint
seven_days_ago = datetime.combine(datetime.today() - timedelta(7),
datetime.min.time())
args = {
'owner': 'airflow',
'start_date': seven_days_ago,
}
dag = DAG(dag_id='python_test', default_args=args)
def print_context(ds, **kwargs):
pprint(kwargs)
print(ds)
return 'Whatever you return gets printed in the logs'
run_this = PythonOperator(
task_id='print',
provide_context=True,
python_callable=print_context,
dag=dag)
Если я попробую, например:
тест воздушного потока python_test print 2015-01-01
Это работает!
Теперь я хочу поместить мою функцию def print_context(ds, **kwargs)
в другой файл python. Поэтому я создаю файл antoher с именем: simple_test.py и изменяю:
run_this = PythonOperator(
task_id='print',
provide_context=True,
python_callable=simple_test.print_context,
dag=dag)
Теперь я снова пытаюсь запустить:
тест воздушного потока python_test print 2015-01-01
И ОК! Он по-прежнему работает!
Но если я создаю модуль, например, рабочий модуль с файлом SimplePython.py
, импортируйте (from worker import SimplePython
) его и попробуйте:
тест воздушного потока python_test print 2015-01-01
Он выдает сообщение:
ImportError: нет модуля с именем worker
Вопросы:
- Можно ли импортировать модуль внутри определения DAG?
- Как Airflow + Celery собирается распространять все необходимые файлы источников python на рабочих узлах?