【问题标题】:Airflow structure/organization of Dags and tasksDags和任务的气流结构/组织
【发布时间】:2017-11-09 12:07:00
【问题描述】:

我的问题:

【问题讨论】:

    标签: airflow apache-airflow


    【解决方案1】:

    我用这样的东西。

    • 项目通常是完全独立或独特的。也许 DAG 用于处理我们从某个客户端收到的文件,这些文件与其他所有内容完全无关(几乎可以肯定是一个单独的数据库架构)
    • 我的操作符、挂钩和一些帮助脚本(删除某个 DAG 的所有 Airflow 数据等)位于一个公共文件夹中
    • 我曾经有一个用于整个 Airflow 文件夹的 git 存储库,但现在我每个项目都有一个单独的 git(由于项目是如此不相关,因此在 Gitlab 上授予权限变得更有条理和更容易)。这意味着每个项目文件夹也可以作为 .git 和 .gitignore 等等
    • 我倾向于保存原始数据,然后“休息”数据的修改副本,这正是复制到数据库中的内容。由于来自不同客户端的不同格式(Excel、网络抓取、HTML 电子邮件抓取、平面文件、来自 SalesForce 或其他数据库源的查询...),我不得不大量修改一些原始数据。

    示例树:

    ├───dags
    │   ├───common
    │   │   ├───hooks
    │   │   │       pysftp_hook.py
    │   │   │
    │   │   ├───operators
    │   │   │       docker_sftp.py
    │   │   │       postgres_templated_operator.py
    │   │   │
    │   │   └───scripts
    │   │           delete.py
    │   │
    │   ├───project_1
    │   │   │   dag_1.py
    │   │   │   dag_2.py
    │   │   │
    │   │   └───sql
    │   │           dim.sql
    │   │           fact.sql
    │   │           select.sql
    │   │           update.sql
    │   │           view.sql
    │   │
    │   └───project_2
    │       │   dag_1.py
    │       │   dag_2.py
    │       │
    │       └───sql
    │               dim.sql
    │               fact.sql
    │               select.sql
    │               update.sql
    │               view.sql
    │
    └───data
        ├───project_1
        │   ├───modified
        │   │       file_20180101.csv
        │   │       file_20180102.csv
        │   │
        │   └───raw
        │           file_20180101.csv
        │           file_20180102.csv
        │
        └───project_2
            ├───modified
            │       file_20180101.csv
            │       file_20180102.csv
            │
            └───raw
                    file_20180101.csv
                    file_20180102.csv
    

    2021 年 10 月更新。我现在有一个适用于所有项目的存储库。我所有的转换脚本都在 plugins 文件夹中(它还包含钩子和运算符 - 基本上是我导入到我的 DAG 中的任何代码)。我尽量保持裸露的 DAG 代码,因此它基本上只是规定了时间表以及数据的加载位置。

    ├───dags
    │   │
    │   ├───project_1
    │   │     dag_1.py
    │   │     dag_2.py
    │   │
    │   └───project_2
    │         dag_1.py
    │         dag_2.py
    │
    ├───plugins
    │   ├───hooks
    │   │      pysftp_hook.py
    |   |      servicenow_hook.py
    │   │   
    │   ├───sensors
    │   │      ftp_sensor.py
    |   |      sql_sensor.py
    |   |
    │   ├───operators
    │   │      servicenow_to_azure_blob_operator.py
    │   │      postgres_templated_operator.py
    │   |
    │   ├───scripts
    │       ├───project_1
    |       |      transform_cases.py
    |       |      common.py
    │       ├───project_2
    |       |      transform_surveys.py
    |       |      common.py
    │       ├───common
    |             helper.py
    |             dataset_writer.py
    | .airflowignore
    | Dockerfile
    | docker-stack-airflow.yml
    

    【讨论】:

    • 我觉得这个目录结构很有用;只有一个疑问:将所有内容放在dag 目录下会影响scheduler 的性能吗?尽管即使我将包含operators(或除实际DAGs 之外的任何内容)的文件放在dag 目录之外并将它们导入DAG 文件中,这或多或少都意味着相同的事情。但是dag 文件夹中的非python 文件(如上面的.sql 文件)可能(理论上)会给scheduler 造成不必要的开销
    • 哦,我不确定。不过,我将不得不调查一下。老实说,我从来没有想过 - 由于版本控制(易于克隆或端到端共享特定项目,而不是混淆项目),我更多地以这种方式设置它
    • I used to have a single git repository for the entire Airflow folder, but now I have a separate git per project 然后你如何将不同的 repos 粘合到主 repo 中? (我目前的解决方案是使用 git 子模块)
    • 只是跟进这个线程。有没有人看到这个存储库结构对调度程序有任何影响?
    【解决方案2】:

    我也很想与其他人一起对文件夹结构进行基准测试。也许这取决于您使用 Airflow 的目的,但我会分享我的情况。我正在做数据管道来构建数据仓库,所以在高层我基本上有两个步骤:

    1. 将大量数据转储到数据湖中(只有少数人可以直接访问)
    2. 将数据湖中的数据加载到分析数据库中,在该数据库中数据将被建模并提供给仪表板应用程序(许多 sql 查询来对数据建模)

    今天我将文件整理到三个主要文件夹中,试图反映上述逻辑:

    ├── dags
    │   ├── dag_1.py
    │   └── dag_2.py
    ├── data-lake
    │   ├── data-source-1
    │   └── data-source-2
    └── dw
        ├── cubes
        │   ├── cube_1.sql
        │   └── cube_2.sql
        ├── dims
        │   ├── dim_1.sql
        │   └── dim_2.sql
        └── facts
            ├── fact_1.sql
            └── fact_2.sql
    

    这或多或少是我的基本文件夹结构。

    【讨论】:

    • 只是重申这只是我的组织方式。如果有人提出这个问题,那么用其他方式来构建文件夹和文件进行基准测试会很棒! :)
    猜你喜欢
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2017-01-01
    • 2021-01-25
    • 2018-01-14
    • 1970-01-01
    相关资源
    最近更新 更多