在没有Apache Airflow的情况下运行Apache Airflow DAG

在没有Apache Airflow的情况下运行Apache Airflow DAG,airflow,Airflow,所以这里有一个愚蠢的想法 我在气流中创建了(许多)DAG。。。而且它是有效的。。。然而,我想以某种方式包装它,这样我就可以在没有安装气流的情况下运行单个DAG;ie自带,所以我不需要所有的网络服务器、数据库等 我主要是用触发器DAG来实例化新的DAG运行,我注意到运行气流的开销似乎相当高(工人有很高的负载,基本上什么都不做,有时可能需要10秒的时间才能将相关任务排队等) 我对所有的日志记录等都不太在意。听起来你主要关心的是闲置工人对资源的浪费,而不是气流本身的浪费 我建议在单个盒子上运行Loca

所以这里有一个愚蠢的想法

我在气流中创建了(许多)DAG。。。而且它是有效的。。。然而,我想以某种方式包装它,这样我就可以在没有安装气流的情况下运行单个DAG;ie自带,所以我不需要所有的网络服务器、数据库等

我主要是用触发器DAG来实例化新的DAG运行,我注意到运行气流的开销似乎相当高(工人有很高的负载,基本上什么都不做,有时可能需要10秒的时间才能将相关任务排队等)


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

听起来你主要关心的是闲置工人对资源的浪费,而不是气流本身的浪费

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


至于数据库-在不修改气流源本身的情况下,无法删除数据库组件。另一种选择是将SequentialExecutor与SQLite结合使用,但这会消除运行并发任务的能力,因此不推荐用于生产环境。

首先,我认为您需要调整设置

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

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


您不会从操作符或依赖项中获得好处,但您可能可以编写脚本来绕过它。如果不能,就使用Airflow。

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

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()