我按照https://airflow.apache.org/tutorial.html原样设置dag,唯一的变化是我将dag设置为以5分钟的间隔运行,开始日期为2017-12-17 T13:40:00世界标准时间。我在13:40之前启用了dag,所以没有回填,我的机器在UTC上运行。 dag按预期运行(即从UTC时间13:45起以5分钟的间隔)
现在,当我进入树视图时,我无法理解图形。总共有3个任务。 'sleep'(t2)将上游设置为'printdate'(t1),'templated'(t3)也将上游设置为'printdate'(t1)。那么为什么图表显示两个'printdate'?它们是否分离了该任务的任务实例?如果是,那么我如何确保只有1个t1任务实例运行(菱形模式)。还有4个绿色矩形框(有两个'printdate'),而不是3。
# t1, t2 and t3 are examples of tasks created by instantiating operators
t1 = BashOperator(
task_id='print_date',
bash_command='date',
dag=dag)
t2 = BashOperator(
task_id='sleep',
bash_command='sleep 5',
retries=3,
dag=dag)
templated_command = """
{% for i in range(5) %}
echo "{{ ds }}"
echo "{{ macros.ds_add(ds, 7)}}"
echo "{{ params.my_param }}"
{% endfor %}
"""
t3 = BashOperator(
task_id='templated',
bash_command=templated_command,
params={'my_param': 'Parameter I passed in'},
dag=dag)
t2.set_upstream(t1)
t3.set_upstream(t1)
其次,为什么dag上面的时间会运行(绿色圆圈),显示为8.40,8.45 - ?这是什么时间/时区?我已将dag的start_date设置为13.40,并将我的机器设置为UTC。
答案 0 :(得分:3)
它们不是单独的实例。你可以看到这个:
在树状视图中,两个圆圈的开始/结束日期和持续时间将完全相同。
在甘特图视图中,您只会看到print_date
的单个实例的持续时间。
通常,您无法将DAG映射到树视图,而无需复制已完成的节点。
答案 1 :(得分:-1)
1.是的,它们是分开的任务。要确保只有一个print_date
,您可以执行以下操作:
t1 >> t2 >> t3
而不是
t2.set_upstream(t1)
t3.set_upstream(t1)
您可以根据工作流程更改订单。
2.在我的机器上,这些绿点以UTC显示计划运行的时间。您确定不在您的数据库时区吗?