【发布时间】:2021-05-23 05:53:06
【问题描述】:
我在运行 Ubuntu 和 python 3.8 的服务器上安装了 Airflow。我正在尝试在 Airflow UI 中导入一个简单的 dag 以列出存储桶中的文件。
from airflow import DAG
from airflow.providers.amazon.aws.operators.s3_copy_object import S3CopyObjectOperator
from airflow.providers.amazon.aws.operators.s3_list import S3ListOperator
from airflow.operators.python import PythonOperator
from airflow.operators.bash import BashOperator
from datetime import datetime
default_args = {
'start_date':datetime(2020,1,1)
}
with DAG('S3_to_S3', schedule_interval='@daily',default_args=default_args,catchup=False) as dag:
list_files = S3ListOperator(
task_id = 'list_S3_bucket',
aws_conn_id='S3_Connection',
bucket='xxxxx'
)
list_files
但在Airflow UI中导入失败并抛出异常:
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/home/airflow/airflow/dags/S3_to_S3.py", line 4, in <module>
from airflow.providers.amazon.aws.operators.s3_list import S3ListOperator
ModuleNotFoundError: No module named 'airflow.providers.amazon'
我已经使用 pip 安装了 amazon 提供程序包及其依赖项,但 Airflow UI 无法找到这些包。 为了验证是否安装了提供程序,我在 python 控制台中导入了 amazon 包并成功导入。
Python 3.8.9
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>>
>>> from airflow.providers.amazon.aws.operators.s3_list import S3ListOperator
>>> from airflow.providers.amazon.aws.operators.s3_copy_object import S3CopyObjectOperator
>>> import airflow.providers.amazon
>>>
我需要更改气流中的任何配置或设置任何环境变量吗?
【问题讨论】:
-
你使用什么执行器?我假设你用芹菜?您需要在所有工作人员上安装提供程序包。看来您只在运行调度程序的机器上安装了它。
-
我正在使用顺序执行器。目前,我们正在对气流进行 POC,因此我们仅在一个节点上安装了气流。所有的服务——调度程序、Webserver、数据库都在一个节点上运行。我只更改了气流 cfg 中的几件事 - executor = SequentialExecutor, sql_alchemy_conn = postgresql+psycopg2://xxx:xxxx@localhost:5432/airflow, load_examples = False
-
这可能是您在 --editable 模式下安装了气流吗? github.com/apache/airflow/issues/13603#issuecomment-757923733 ?
-
感谢您的回复。我没有以可编辑模式安装气流,但我浏览了这篇文章,我看到我的一些提供程序安装在站点包中,其中一些安装在 dist 包中,我猜这会产生问题,但我不确定如何解决此问题,因为当我使用
pip install apache-airflow-providers-amazon时,它将软件包安装在 /home/airflow/.local/lib/python3.8/site-packages/ 下而不是 /usr/local/lib/python3.8/dist-包。我该如何解决? -
xxxxx:~$ ls /usr/local/lib/python3.8/dist-packages | grep apache_airflow_providers_* apache_airflow_providers_ftp-1.1.0.dist-info apache_airflow_providers_http-1.1.1.dist-info apache_airflow_providers_imap-1.0.1.dist-info apache_airflow_providers_postgres-1.0.2.dist-info apache_airflow_providers_slack-3.0.0.dist-info xxxx:~$ ls .local/lib/python3.8/site-packages/ | grep apache_airflow_providers_* apache_airflow_providers_amazon-1.4.0.dist-info apache_airflow_providers_exasol-1.1.1.dist-info apache_airflow_providers_google-3.0.0.dist-info apache_airflow_providers_ssh-1.3.0.dist-info