【问题标题】:Run Apache Airflow DAG without Apache Airflow在没有 Apache Airflow 的情况下运行 Apache Airflow DAG
【发布时间】:2018-07-01 18:17:19
【问题描述】:

所以这是一个愚蠢的想法......

我在气流中创建了(许多)DAG...并且它可以工作...但是,我想以某种方式将其打包,以便我可以在不安装气流的情况下运行单个 DAG Run;即它是自包含的,所以我不需要所有的网络服务器、数据库等。

无论如何,我主要使用触发 dag 实例化新的 DAG Run,我注意到运行气流的开销似乎很高(工作人员的高负载基本上什么都不做,有时可能需要 10 秒才能将相关任务排队等)。

我不太在意所有的日志记录等。

【问题讨论】:

    标签: airflow


    【解决方案1】:

    您可以创建一个执行气流操作符的脚本,尽管这会丢失 Airflow 提供的所有元数据。您仍然需要将 Airflow 作为 Python 包安装,但您不需要运行任何网络服务器等。一个简单的示例可能如下所示:

    from dags.my_dag import operator1, operator2, operator3
    
    def main():
        # execute pipeline
        # operator1 -> operator2 -> operator3
    
        operator1.execute(context={})
        operator2.execute(context={})
        operator3.execute(context={})
    
    if __name__ == "__main__":
        main()
    

    【讨论】:

      【解决方案2】:

      听起来您主要关心的是闲置工人对资源的浪费,而不是对 Airflow 本身的浪费。

      我建议在单个机器上使用 LocalExecutor 运行 Airflow。这将为您带来并发执行的好处,而无需管理工作人员。

      至于数据库 - 如果不修改气流源本身,就无法删除数据库组件。一种替代方法是将 SequentialExecutor 与 SQLite 结合使用,但这会消除运行并发任务的能力,因此不建议用于生产。

      【讨论】:

        【解决方案3】:

        首先我想说你需要调整你的气流设置。

        但如果这不是一个选项,那么另一种方法是在 DAG 之外的代码中编写您的主要逻辑。 (这也是最佳实践)。对我来说,这也使代码更容易在本地测试。

        编写一个 shell 脚本很容易将几个进程绑定在一起。

        您不会从运算符或依赖项中受益,但您可能可以编写自己的方式来解决它。如果不能,请使用 Airflow。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-13
          • 1970-01-01
          • 1970-01-01
          • 2019-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多