了解 apache 气流中的树视图

understanding the tree view in apache airflow

我按原样从 https://airflow.apache.org/tutorial.html 设置 dag,唯一的变化是我将 dag 设置为 运行,间隔为 5 分钟,开始日期为 2017-12- 17 T13:40:00 协调世界时。我在 13:40 之前启用了 dag,所以没有回填,我的机器在 UTC 上 运行ning。 dag 运行 符合预期(即从 13:45 UTC 开始间隔 5 分钟)

现在,当我转到树视图时,我无法理解图表。一共有3个任务。 'sleep'(t2) 的上游设置为 'printdate' (t1),'templated'(t3) 的上游也设置为 'printdate'(t1)。那为什么图表显示两个 'printdate's ?它们是该任务的独立任务实例吗?如果是,那么我如何确保只有 1 个任务实例 t1 运行s(菱形图案)。还有 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 运行s(绿色圆圈)上方的时间显示8.40、8.45 - ?那是什么time/timezone?我已将 dag 的 start_date 设置为 13.40,我的机器设置为 UTC。

1.Yes,它们是独立的任务。要确保只有一个 print_date,您可以这样做:

t1 >> t2 >> t3

而不是

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

您可以根据您的工作流程更改顺​​序。

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

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

  1. 在树视图中,两个圆圈的 start/end 日期和持续时间将完全相同。

  2. 在甘特图中,您只会看到 print_date.

  3. 的单个实例的持续时间

一般来说,如果不像他们所做的那样复制节点,就无法将 DAG 映射到树视图。