【问题标题】:Airflow webserver gives cron error for dags with None as schedule intervalAirflow 网络服务器为 dags 提供 cron 错误,其中 None 作为计划间隔
【发布时间】:2018-07-25 13:56:54
【问题描述】:

我在 Linux AMI 中运行带有 LocalExecutor 和 PostgreSQL 数据库的 Airflow 1.9.0。我想手动触发 DAG,但是每当我创建一个将 schedule_interval 设置为 None@once 的 DAG 时,网络服务器树视图就会崩溃并出现以下错误(我只显示最后一次调用):

File "/usr/local/lib/python2.7/site-packages/croniter/croniter.py", line 467, in expand 
    raise CroniterBadCronError(cls.bad_length)
CroniterBadCronError: Exactly 5 or 6 columns has to be specified for iteratorexpression.

此外,当我手动触发 DAG 时,DAG 运行开始,但任务本身从未被安排。我环顾四周,但似乎我是唯一一个出现这种错误的人。有没有人遇到过这个错误并找到了解决方法?

触发问题的最小示例:

import datetime as dt
from airflow import DAG
from airflow.operators.bash_operator import BashOperator

default_args = {
    'owner': 'me'
}

bash_command = """
    echo "this is a test task"
"""

with DAG('schedule_test',
        default_args=default_args,
        start_date = dt.datetime(2018, 7, 24),
        schedule_interval='None',
        catchup=False
        ) as dag:

    first_task = BashOperator(task_id = "first_task", bash_command = bash_command)

【问题讨论】:

  • 似乎设置@none 会产生同样的错误,但设置Python 对象None 可能会起作用..

标签: python airflow airflow-scheduler


【解决方案1】:

试试这个:

  • schedule_interval 设置为None,不带'',或者干脆不指定schedule_interval in your DAG。它设置为None as a default。在此处了解更多信息:airflow docs -- 搜索 schedule_interval
  • 在 dag 底部为您的任务设置编排。

像这样:

import datetime
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.operators.dummy_operator import DummyOperator

default_args = {
    'owner': 'me'
}

bash_command = """
    echo "this is a test task"
"""

with DAG('schedule_test',
        default_args=default_args,
        start_date = datetime(2018, 7, 24),
        schedule_interval=None,
        catchup=False
        ) as dag:

t1 = DummyOperator(
    task_id='extract_data',
    dag=dag
)

t2 = BashOperator(
    task_id = "first_task", 
    bash_command = bash_command
)

#####ORCHESTRATION#####
## It is saying that in order for t2 to run, t1 must be done.
t2.set_upstream(t1)

【讨论】:

  • 感谢您的帮助@Zack!我昨天发现你需要将schedule_interval 设置为Python 对象None 才能工作,哈哈。 DAG 的编排并不是一个真正的问题,我只是在计划时间间隔上苦苦挣扎。
  • 顺便说一句,虽然 BaseOperator 默认可能有schedule_interval = None,但对于 DAG 对象,它设置为schedule_interval = timedelta(1),请参阅airflow.apache.org/code.html#airflow.models.DAG
  • 此外,DAG 设置为schedule_interval='@once' 时仍然存在问题。我知道 Airflow 不会自行安排 DAG 运行(因为我没有设置 end_date),但它应该安排手动触发的 DAG 运行..
  • 谢谢@zack! yoru answer对我有帮助,但是,我相信如果您删除 schedule_interval,则默认值为“@daily”。至少在气流 1.10
  • schedule_interval=None 添加到 default_args 是否有效??
猜你喜欢
  • 2022-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多