目標
我正在嘗試運行一個簡單的 DAG,它創建一個 Pandas DataFrame 并寫入一個檔案。DAG 正在使用 Airflow 的 Docker 容器中運行,并且正在將檔案寫入命名卷。
問題
當我啟動容器時,出現錯誤:
Broken DAG: [/usr/local/airflow/dags/simple_datatest.py] [Errno 13] Permission denied: '/usr/local/airflow/data/local_data_input.csv'
問題
為什么我收到這個錯誤?我該如何解決這個問題才能正確寫入?
語境
我在這里松散地遵循教程,但我修改了 DAG。我正在使用puckel/docker-airflow來自 Docker Hub的影像。我已經附加了一個指向適當 DAG 的卷,并且我已經創建了另一個卷來包含寫入 DAG 中的資料(通過運行創建docker volume create airflow-data)。
運行命令是:
docker run -d -p 8080:8080 \
-v /path/to/local/airflow/dags:/usr/local/airflow/dags \
-v airflow-data:/usr/local/airflow/data:Z \
puckel/docker-airflow \
webserver
位于/usr/local/airflow/dags容器上路徑的 DAG定義如下:
import airflow
from airflow import DAG
from airflow.operators import BashOperator
from datetime import datetime, timedelta
import pandas as pd
# Following are defaults which can be overridden later on
default_args = {
'owner': 'me',
'depends_on_past': False,
'start_date': datetime(2021, 12, 31),
'email': ['[email protected]'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=1),
}
dag = DAG('datafile', default_args=default_args)
def task_make_local_dataset():
print("task_make_local_dataset")
local_data_create=pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
local_data_create.to_csv('/usr/local/airflow/data/local_data_input.csv')
t1 = BashOperator(
task_id='write_local_dataset',
python_callable=task_make_local_dataset(),
bash_command='python3 ~/airflow/dags/datatest.py',
dag=dag)
DAG 中的錯誤似乎在行中
local_data_create.to_csv('/usr/local/airflow/data/local_data_input.csv')
我無權寫入此位置。
嘗試
我嘗試更改data容器上目錄的位置,但氣流無法訪問它。我必須更改權限嗎?似乎這是大多數人都希望能夠做的非常簡單的事情:寫入容器。我想我只是錯過了一些東西。
uj5u.com熱心網友回復:
不要使用Puckel Docker Image。多年未維護,Airflow 1.10 已于 2021 年 6 月達到 End Of Life。您應該只看 Airflow 2,Airflow 有官方參考圖片,您可以使用:
Airflow 2 也有您可以使用的快速入門指南 - 基于影像和 docker compose:https : //airflow.apache.org/docs/apache-airflow/stable/start/index.html
它還具有 Helm Chart,可用于生產您的設定。https://airflow.apache.org/docs/helm-chart/stable/index.html
不要在 Puckel 和 Airflow 1.10 上浪費您(和其他人)的時間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/401887.html
