Python 从今天开始,即2019-12-18,安排气流中的DAG每5分钟运行一次
从今天(2019-12-18)开始,我尝试每5分钟运行一次DAG。我将我的开始日期定义为Python 从今天开始,即2019-12-18,安排气流中的DAG每5分钟运行一次,python,airflow,directed-acyclic-graphs,airflow-scheduler,Python,Airflow,Directed Acyclic Graphs,Airflow Scheduler,从今天(2019-12-18)开始,我尝试每5分钟运行一次DAG。我将我的开始日期定义为start\u date:dt.datetime(2019,12,18,10,00,00),计划间隔定义为schedule\u interval='*/5****'。启动气流调度器时,我看不到任何任务正在运行 但是,当我将开始日期修改为开始日期:dt.datetime(2019、12、17、10、00、00)即昨天的日期时,DAG会像每10秒而不是每5分钟一样连续运行 我认为解决这个问题的方法是正确设置开始日
start\u date:dt.datetime(2019,12,18,10,00,00)
,计划间隔定义为schedule\u interval='*/5****'
。启动气流调度器时,我看不到任何任务正在运行
但是,当我将开始日期
修改为开始日期:dt.datetime(2019、12、17、10、00、00)
即昨天的日期时,DAG会像每10秒而不是每5分钟一样连续运行
我认为解决这个问题的方法是正确设置开始日期
,但我找不到完美的解决方案。请帮帮我
这是我的密码
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
import datetime as dt
from airflow.operators.python_operator import PythonOperator
def print_world():
print('world')
default_args = {
'owner': 'bhanuprakash',
'depends_on_past': False,
'start_date': dt.datetime(2019, 12, 18, 10, 00, 00),
'email': ['bhanuprakash.uchula@techwave.net'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': dt.timedelta(minutes=5)
}
with DAG('dag_today',
default_args=default_args,
schedule_interval= '*/5 * * * *'
) as dag:
print_hello = BashOperator(task_id='print_hello',
bash_command='gnome-terminal')
sleep = BashOperator(task_id='sleep',
bash_command='sleep 5')
print_world = PythonOperator(task_id='print_world',
python_callable=print_world)
print_hello >> sleep >> print_world
您传递给Airflow的datetime对象不支持时区。气流内部使用UTC。您传递给Airflow的原始datetime对象可能与调度器的时间概念不一致,这可能是DAG没有被安排在“今天”(2019-12-18)午夜运行的原因
而不是像这样传递一个简单的datetime对象:
'start_date': dt.datetime(2019, 12, 18, 10, 00, 00)
尝试使用钟摆使DAG时区感知:
import pendulum
...
'start_date': pendulum.datetime(year=2019, month=12, day=10).astimezone('YOUR TIMEZONE'), # See list of tz database time zones here -> https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
这些文档()非常有用,它们提供了如何处理数据流中的日期时间的技巧
至于你关于跑步频率的另一个问题。。。默认情况下,DAG跑步的目的是在开始日期和结束日期之间的所有时间间隔上进行“追赶”。要禁用此行为,需要在实例化DAG时添加catchup=False
从
回填和收集
带有开始日期、结束日期和结束日期的气流DAG
schedule\u interval定义了一系列由调度器执行的间隔
转换为单个Dag运行并执行。气流的关键性能
这些DAG运行是原子的、幂等项,并且
默认情况下,调度程序将检查DAG的生存期(从
从开始到结束/现在,每次间隔一次)并开始DAG跑步
未运行(或已清除)的任何间隔。这个概念
这叫追赶
如果您的DAG是为处理自己的捕获而编写的(即不限于
间隔,但改为“现在”,例如。),然后您将需要
关闭catchup(使用DAG.catchup在DAG本身上=
False)或默认情况下在配置文件级别使用
默认情况下,catchup\u=False。这样做的目的是指导
调度器仅为的最新实例创建DAG运行
DAG区间序列
我建议浏览我链接的两页,以更好地了解基本气流概念。您传递给气流的datetime对象不支持时区。气流内部使用UTC。您传递给Airflow的原始datetime对象可能与调度器的时间概念不一致,这可能是DAG没有被安排在“今天”(2019-12-18)午夜运行的原因
而不是像这样传递一个简单的datetime对象:
'start_date': dt.datetime(2019, 12, 18, 10, 00, 00)
尝试使用钟摆使DAG时区感知:
import pendulum
...
'start_date': pendulum.datetime(year=2019, month=12, day=10).astimezone('YOUR TIMEZONE'), # See list of tz database time zones here -> https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
这些文档()非常有用,它们提供了如何处理数据流中的日期时间的技巧
至于你关于跑步频率的另一个问题。。。默认情况下,DAG跑步的目的是在开始日期和结束日期之间的所有时间间隔上进行“追赶”。要禁用此行为,需要在实例化DAG时添加catchup=False
从
回填和收集
带有开始日期、结束日期和结束日期的气流DAG
schedule\u interval定义了一系列由调度器执行的间隔
转换为单个Dag运行并执行。气流的关键性能
这些DAG运行是原子的、幂等项,并且
默认情况下,调度程序将检查DAG的生存期(从
从开始到结束/现在,每次间隔一次)并开始DAG跑步
未运行(或已清除)的任何间隔。这个概念
这叫追赶
如果您的DAG是为处理自己的捕获而编写的(即不限于
间隔,但改为“现在”,例如。),然后您将需要
关闭catchup(使用DAG.catchup在DAG本身上=
False)或默认情况下在配置文件级别使用
默认情况下,catchup\u=False。这样做的目的是指导
调度器仅为的最新实例创建DAG运行
DAG区间序列
我建议浏览我链接的两页,以更好地了解基本气流概念