繁体   English   中英

Airflow DAG 找不到要在 s3 上上传的本地文件

[英]Airflow DAG can't find local file to upload on s3

我创建了一个 DAG 来将本地文件上传到个人 S3 存储桶中。 但是,访问 http://localhost:9099/home 时出现以下错误:

FileNotFoundError: [Errno 2] 没有这样的文件或目录:'C:\Users\plata\OneDrive\Υπολογιστής\projects backups\airflow-sqlserver\dags\pricedata.xlsx'
Ariflow 错误 - 损坏的数据

我有一台 Windows PC,我正在 docker 容器上运行气流。

这是 DAG 的代码:

# airflow related
from airflow import DAG
from airflow.operators.python import PythonOperator
# other packages
from datetime import datetime
import boto3

with DAG(
    dag_id='file_to_s3',
    start_date=datetime(2022, 12, 5),
    catchup=False,
) as dag:
    pass


def file_to_s3():
    #Creating Session With Boto3.
    session = boto3.Session(
    aws_access_key_id='my_access_key_id',
    aws_secret_access_key='my_secret_access_key'
    )

    #Creating S3 Resource From the Session.
    s3 = session.resource('s3')

    result = s3.Bucket('flight-data-test-bucket').upload_file(r'C:\Users\plata\OneDrive\Υπολογιστής\projects backups\airflow-sqlserver\dags\pricedata.xlsx', 'pricedata.xlsx')

    return (result)


with DAG(
    dag_id='file_to_s3',
    start_date=datetime(2022, 12, 5),
    catchup=False
) as dag:
    # Upload the file
    task_file_to_s3 = PythonOperator(
        task_id='file_to_s3',
        python_callable=file_to_s3()
    )

我不明白为什么会这样,因为我已经将本地文件存储到我的“dags”文件夹中:
价格数据.xlsx 位置

我的“dags”文件夹已经安装在docker-compose.yml文件中,如下所示:


  environment:
    &airflow-common-env
    AIRFLOW__CORE__EXECUTOR: CeleryExecutor
    AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
    # For backward compatibility, with Airflow <2.3
    AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
    AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:airflow@postgres/airflow
    AIRFLOW__CELERY__BROKER_URL: redis://:@redis:6379/0
    AIRFLOW__CORE__FERNET_KEY: ''
    AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION: 'true'
    AIRFLOW__CORE__LOAD_EXAMPLES: 'true'
    AIRFLOW__API__AUTH_BACKEND: 'airflow.api.auth.backend.basic_auth'
    _PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-}
  volumes:
    - ./dags:/opt/airflow/dags
    - ./logs:/opt/airflow/logs
    - ./plugins:/opt/airflow/plugins
    - ./data:/opt/airflow/data
  user: "${AIRFLOW_UID:-50000}:0"

有任何想法吗? 这个问题可能是我通过 Docker 在 Windows 上运行 Airflow 造成的吗?

默认情况下,docker 容器的文件系统不与 windows 共享。

你可以挂载一个驱动器,这样你就可以持久化文件并在你的窗口和你的 docker 之间共享它们:

https://www.docker.com/blog/file-sharing-with-docker-desktop/

请注意,在您的 docker 中,您将需要“在您的 docker 容器中”看到的文件路径

使用您的 docker compose,您的 xslx 文件似乎安装在此处:./dags:/opt/airflow/ ./dags:/opt/airflow/dags

所以我假设,在你的 dag 代码中,你可以尝试:

result = s3.Bucket('flight-data-test-bucket').upload_file(r'opt/airflow/dags/pricedata.xlsx', 'pricedata.xlsx')

在 DAG 文件夹之外安装一个包含项目数据的附加驱动器可能是个好主意。

将路径更改为: result = s3.Bucket('flight-data-test-bucket').upload_file('/opt/airflow/dags/pricedata.xlsx', 'pricedata.xlsx')

我还必须将python_callable=file_to_s3()修复为python_callable=file_to_s3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM