Amazon AirFlow 1.10.12: No module named 'operators'
Всем привет.
Создаю структуру плагинов и дагов для Amazon AirFlow 1.10.12. Делаю согласно документации:
dags:
- aws_from_redshift_to_s3.py
plugins:
- __init__.py
- from_redshift_to_s3_plugin.py
- operators:
-- __init__.py
-- aws_from_redshift_to_s3_operator.py
aws_from_redshift_to_s3_operator.py:
from airflow.hooks.postgres_hook import PostgresHook
from airflow.models import BaseOperator
from airflow.utils.decorators import apply_defaults
from airflow.contrib.hooks.aws_hook import AwsHook
class FromRedshiftToS3TransferOperator(BaseOperator):
from_redshift_to_s3_plugin.py:
from airflow.plugins_manager import AirflowPlugin
from operators.aws_from_redshift_to_s3_operator import FromRedshiftToS3TransferOperator
class FromRedShiftToS3Plugin(AirflowPlugin):
name = 'from_redshift_to_s3_plugin'
operators = [FromRedshiftToS3TransferOperator]
В самом ДАГе подключаю так:
from operators.from_redshift_to_s3_plugin import FromRedshiftToS3TransferOperator
При попытке активировать ДАГ в Amazon AirFlow 1.10.12 получаю ошибку: No module named 'operators'
Ответы (1 шт):
Возможно в AWS есть какой то параметр, лень читать всю доку) Но Вам необходимо проверить подтягиваются ли плагины в /usr/local/airflow/plugins/* , именно от туда он их будет подгружать, судя по беглому просмотру. Дальше уже действовать в зависимости от того есть они там или нет. А вообще, если говорить о стандартном размещение airflow - все модули подтягиваются (без дополнительных настроек) из dags/ , именно внутри него ( и относительно него) надо строить все импорты.
Вот пример вызова кастомного оператора в dag_use_castom_operator.py:
from plugins.operators import MyCastomOperator
from plugins.sensors import MyCastomSensor
вот дерево директорий:
dags/
dag_use_castom_operator.py
- plugins/
__init__.py
- hooks/
- operators/
__init__.py
MyCastomOperator.py
- sensors/
__init__.py
MyCastomSensor.py
Для удобства в IDE нужно настроить sorce_folders(Если IDE - PyCharm) на директорию dags что бы при разработке правильно импортировались модули.