Airflow 使用气流/云合成器在DAG中进行并行建模

Airflow 使用气流/云合成器在DAG中进行并行建模,airflow,directed-acyclic-graphs,google-cloud-composer,Airflow,Directed Acyclic Graphs,Google Cloud Composer,我想创建一个DAG在Google Cloud Composer中运行。工作流包含一个ParallelFor,我不知道如何建模 工作流程如下所示: task1 >> task2 >> task3 >> task4 其中task2将数据拆分为x阵列。现在,我想为这些x阵列并行运行task3。Task3输出一些东西,task4组合输出 (您可以在此处找到工作流的图片:) 现在,我有两个可能的想法,它如何工作: 它有一个简单的语法(如用于顺序执行的>)。但我没有找到

我想创建一个DAG在Google Cloud Composer中运行。工作流包含一个ParallelFor,我不知道如何建模

工作流程如下所示:

task1 >> task2 >> task3 >> task4
其中task2将数据拆分为x阵列。现在,我想为这些x阵列并行运行task3。Task3输出一些东西,task4组合输出

(您可以在此处找到工作流的图片:)

现在,我有两个可能的想法,它如何工作:

  • 它有一个简单的语法(如用于顺序执行的
    >
    )。但我没有找到这样的语法
  • 使用子DAG。我的想法是附加task2,以便它创建x个子DAG(每个数组一个子DAG)。子DAG基本上是task3。所有子DAG完成后,其输出将转发到task4。可能吗?如果是,我该怎么做

  • 我已经找到了解决我问题的办法。这是我第一个可能的解决方案。只需使用此链接中的机制:

    我相信,您提到的可能想法为如何在前一个任务结束后运行任务指明了方向

    要并行运行DAG,您应该遵循与此类似的结构

    从日期时间导入日期时间
    从气流导入DAG
    从afflow.operators.bash_operator导入bash operator
    dag=dag(“dag\U平行”,description=“开始教程”,计划\U间隔=无,
    开始日期=日期时间(2019,1,1),
    catchup=错误)
    task_1=bash运算符(task_id='task_1',bash_command='echo“这是task 1!”,dag=dag)
    task_2=bash运算符(task_id='task_2',bash_command='echo“这是task 2!”,dag=dag)
    任务列表=[]
    最大尝试次数=3
    对于范围内的尝试(最大尝试):
    数据_pull=bash运算符(
    task_id='task_3{}'。格式(尝试),
    bash_command='echo“这是任务-3{}!”。格式(尝试),
    dag=dag
    )
    任务列表。追加(数据提取)
    data_validation=bash运算符(task_id='task_final',bash_command='echo'We at end',dag=dag)
    任务1>>任务2>>任务列表
    任务列表>>数据验证
    
    这是通过此方法获得的DAG结构