今天是 2023 年 9 月 8 日。我在容器中运行 Airflow。 Worker、Scheduler 等都已开启。 我有以下 DAG:
from airflow import DAG
from datetime import datetime
from airflow.providers.postgres.operators.postgres import PostgresOperator
with DAG('user_processing',
start_date=datetime(2023,10,12),
schedule_interval='@daily',
catchup=False) as dag:
create_table = PostgresOperator(
task_id='create_table',
postgres_conn_id='postgres',
sql='''
CREATE TABLE IF NOT EXISTS users (
firstname TEXT NOT NULL,
lastname TEXT NOT NULL,
country TEXT NOT NULL,
username TEXT NOT NULL,
password TEXT NOT NULL,
email TEXT NOT NULL
);
'''
)
如果我将来添加start_date并触发手动运行,任务会被标记为成功,但不会运行(需要00:00:00秒才能运行,我故意在SQL中犯了一个错误,以检查是否会出错出去)。 如果我添加过去或现在的开始日期(例如:
start_date=datetime(2022, 1, 1)
),任务将被标记为失败。日志为空。我确信任务中没有错误,因为我可以从 Scheduler-1 容器运行它,没有任何问题。
我很困惑可能出了什么问题。请帮忙
所以,最后问题又回来了,我意识到我有权限问题。 一开始,当我尝试在 /dags 文件夹中创建 DAG 时,收到一条缺少权限的错误。 当运行
ls -la
命令时,它看起来像这样(忽略混淆部分,它确实不相关):
因此,为了创建 DAG 文件,我运行了以下命令:
sudo chown -R betelgeitze ~/data_eng/airflow/dags
现在 ls -la
看起来像这样:
现在,根据您启动 Docker-compose 的时间以及更改权限的时间,DAG 可能无法运行。就我而言,有时它有效,有时无效,我无法弄清楚它停止工作后的确切步骤。但是,如果您遇到我在这个问题中描述的问题,您只需将权限更改回来即可。就我而言,它是:sudo chown -R 50000 ~/data_eng/airflow/dags
(不要忘记添加气流用户的名称而不是 50000,并将路径更改为文件夹所在位置:sudo chown -R <airflow username> <path>
)
从气流导入DAG 从日期时间导入日期时间
with DAG('user_processing',start_date=datetime(2023,1,1),schedule_interval="@daily", catchup=False) 作为 dag:
对于每天运行的 DAG,我通常将 start_date 参数定义如下:
from airflow.utils.dates import days_ago
default_args = {
...,
'start_date': day_ago(1),
...
}
DAG 将在您部署时运行一次,并且过去的执行不会排队。请注意,如果您的 DAG 的周期不是每天,您将需要调整天数。
此外,如果你想按需运行DAG,我建议你将schedule_interval设置为None,而不是在start_date中设置未来的日期,这是没有意义的。