在气流上部署dag文件的有效方法

时间:2018-01-22 09:53:21

标签: apache airflow airflow-scheduler

在将新dags部署到气流时是否遵循了最佳做法?

我在google论坛上看到了一些评论,说明这些dag被保存在GIT存储库中,并且会定期同步到气流群集中的本地位置。
对于这种方法,我有一对问题

  •   我们是否为不同的环境维护单独的dag文件? (测试。生产)   
  • 如果新版本有错误,如何处理ETL回滚到旧版本?

    我们非常感谢您的帮助。如果您需要任何进一步的细节,请告诉我?

  • 1 个答案:

    答案 0 :(得分:31)

    以下是我们为团队管理的方式。

    首先,就命名惯例而言,每个 DAG文件名都与DAG本身的内容(包括DAG版本)中的 DAG ID 相匹配。这很有用,因为最终它是您在Airflow UI中看到的DAG ID,因此您将确切知道每个DAG后面使用的文件。

    像这样的DAG示例:

    from airflow import DAG
    from datetime import datetime, timedelta
    
    default_args = {
      'owner': 'airflow',
      'depends_on_past': False,
      'start_date': datetime(2017,12,05,23,59),
      'email': ['me@mail.com'],
      'email_on_failure': True
    }
    
    dag = DAG(
      'my_nice_dag-v1.0.9', #update version whenever you change something
      default_args=default_args,
      schedule_interval="0,15,30,45 * * * *",
      dagrun_timeout=timedelta(hours=24),
      max_active_runs=1)
      [...]
    

    DAG文件的名称为: my_nice_dag-v1.0.9.py

    • 我们所有的DAG文件都存储在Git存储库(以及其他内容)中
    • 每次在我们的主分支中完成合并请求时,我们的持续集成管道启动一个新构建并将我们的DAG文件打包成一个zip(我们使用Atlassian Bamboo,但还有其他解决方案,如Jenkins,Circle CI,Travis ......)
    • 在Bamboo中,我们配置了一个部署脚本(shell),该脚本解压缩包并将DAG文件放在 / dags 文件夹中的Airflow服务器上。
    • 我们通常在DEV中部署DAG进行测试,然后部署到UAT,最后部署到PROD。由于上面提到的shell脚本,只需单击Bamboo UI中的按钮即可完成部署。

    <强>优势

    1. 由于您已在文件名中包含DAG版本,因此不会覆盖以前版本的DAG文件,因此您仍可以回复它
    2. 当您在Airflow中加载新的DAG文件时,由于版本号,您可以在UI中识别它。
    3. 由于您的DAG文件名= DAG ID,您甚至可以通过添加一些Airflow命令行来改进部署脚本,以便在部署新DAG后自动将其打开。
    4. 因为每个版本的DAG都是在Git中历史化的,所以如果需要,我们总是可以回到以前的版本。