了解apache气流中的树视图

时间:2017-12-17 14:42:02

标签: python workflow airflow apache-airflow

我按照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。

enter image description here

2 个答案:

答案 0 :(得分:3)

它们不是单独的实例。你可以看到这个:

  1. 在树状视图中,两个圆圈的开始/结束日期和持续时间将完全相同。

  2. 在甘特图视图中,您只会看到print_date的单个实例的持续时间。

  3. 通常,您无法将DAG映射到树视图,而无需复制已完成的节点。

答案 1 :(得分:-1)

1.是的,它们是分开的任务。要确保只有一个print_date,您可以执行以下操作:

t1 >> t2 >> t3

而不是

t2.set_upstream(t1)
t3.set_upstream(t1) 

您可以根据工作流程更改订单。

2.在我的机器上,这些绿点以UTC显示计划运行的时间。您确定不在您的数据库时区吗?