python - apache气流窗口中的botocore错误
问题描述
我已经在 apache 气流 webUI 中设置了变量和连接,所以当我尝试从 aiflow 挂钩导入 s3 挂钩时,我使用获取 s3 存储桶中的密钥,但它失败了,我收到以下错误:
[2021-08-24 21:59:11,720] {{dagbag.py:246}} ERROR - Failed to import:
/usr/local/airflow/dags/lesson4.py
webserver_1 | Traceback (most recent call last):
webserver_1 | File "/usr/local/lib/python3.7/site-packages/airflow/models/dagbag.py", line
243, in process_file
webserver_1 | m = imp.load_source(mod_name, filepath)
webserver_1 | File "/usr/local/lib/python3.7/imp.py", line 171, in load_source
webserver_1 | module = _load(spec)
webserver_1 | File "<frozen importlib._bootstrap>", line 696, in _load
webserver_1 | File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
webserver_1 | File "<frozen importlib._bootstrap_external>", line 728, in exec_module
webserver_1 | File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
webserver_1 | File "/usr/local/airflow/dags/lesson4.py", line 9, in <module>
webserver_1 | from airflow.hooks.S3_hook import S3hook
webserver_1 | File "/usr/local/lib/python3.7/site-packages/airflow/hooks/S3_hook.py", line
19, in <module>
webserver_1 | from botocore.exceptions import ClientError
webserver_1 | ModuleNotFoundError: No module named 'botocore'
import datetime
import logging
from airflow import DAG
from airflow.models import Variable
from airflow.operators.python_operator import PythonOperator
#import airflow.hooks.S3_hook as S3Hook
from airflow.hooks.S3_hook import S3Hook
def list_keys():
hook = S3Hook(aws_conn_id='aws_credentials')
bucket = Variable.get('s3_bucket')
prefix = Variable.get('s3_prefix')
logging.info(f"Listing Keys from {bucket}/{prefix}")
keys = hook.list_keys(bucket, prefix=prefix)
for key in keys:
logging.info(f"- s3://{bucket}/{key}")
dag = DAG(
'lesson1.exercise4',
start_date=datetime.datetime.now())
list_task = PythonOperator(
task_id="list_keys",
python_callable=list_keys,
dag=dag
)
谁能告诉我如何解决这个问题
解决方案
看起来您没有安装Amazon 提供程序包botocore
的 PIP 要求。
您可以使用 pip 在 Airflow 2.1+ 之上安装提供程序包:
pip install apache-airflow-providers-amazon
安装后,如果您airflow info
从 CLI 运行,您应该会看到它列在Providers info 部分下。
...
Providers info
apache-airflow-providers-amazon | 2.0.0
apache-airflow-providers-celery | 2.0.0
apache-airflow-providers-cncf-kubernetes | 2.0.0
...
如果您使用 Docker Compose 运行 Airflow,此答案可能会帮助您了解如何在容器中安装 pip 包。
推荐阅读
- javascript - 将原始数据转换为图形就绪数据
- php - Laravel 雄辩选择 1:n 到 1:1
- wordpress - woocommerce重定向到结帐不起作用
- python - Deploying python with docker, images too big
- android - Firebase recyclerview 适配器分页
- java - 如何从使用 Java 反射 API 调用的方法中检索对象?
- java - 在 jstl sql:query 中使用 java 变量
- javascript - 具有多种颜色的 Google 图表网格背景
- selenium - 无法找到 Kendo 网格单元的 Web 元素
- android - Kotlin/Anko/OpenCV/CameraView 无法创建处理程序,因为线程尚未调用 Looper.prepare()