Airflow 跨DAG的持久数据存储
我有两个DAG,它们创建临时AWS EMR集群,然后在完成运行后终止它们。我想创建一个每天运行的新DAG,并生成当天创建的每个EMR集群的报告,以及它运行的时间,并通过电子邮件将此报告发送给不同的人 我需要存储EMR集群ID值,以便我的报告生成器具有当天每个EMR集群ID的列表。我想知道我是否可以修改气流变量来存储这些信息,例如,我可以有一个气流变量,其中键是“EMR_CLUSTERS”,值是一个JSON字符串,包含我想要记录的所有数据。或者我可以使用已经被用来写入新表的Airflow元数据库来写入这些信息吗Airflow 跨DAG的持久数据存储,airflow,Airflow,我有两个DAG,它们创建临时AWS EMR集群,然后在完成运行后终止它们。我想创建一个每天运行的新DAG,并生成当天创建的每个EMR集群的报告,以及它运行的时间,并通过电子邮件将此报告发送给不同的人 我需要存储EMR集群ID值,以便我的报告生成器具有当天每个EMR集群ID的列表。我想知道我是否可以修改气流变量来存储这些信息,例如,我可以有一个气流变量,其中键是“EMR_CLUSTERS”,值是一个JSON字符串,包含我想要记录的所有数据。或者我可以使用已经被用来写入新表的Airflow元数据库来
在Airflow中存储永久数据的选项有哪些?您提到的任一选项都可以:
session=settings.session()
网络存储
在本例中,只需正常读取/写入文件。对于变量选项,其文档仅演示如何从变量读取,而不是从Python代码中写入变量。我知道如何使用CLI设置它们,比如
气流变量--set key value
,但是是否可以从代码中设置它们(除了通过bash操作符发送上一个命令之外)?我正试图找到aiffort.models.Variables
API文档,但找不到它。另外,我想知道在这类任务中使用MetaDB是否不好?我觉得基础设施和代码的混合可能会造成潜在的危险。例如,DevOps中的某个人可以为Airflow环境创建一个新的MetaDB,而没有意识到它也用于代码(idk只是我脑海中的一个例子)。我觉得像这样的东西应该有一个气流标准,或者用户可能会创建他们自己的数据库来存储这样的信息?我们使用大量气流,并使用元数据数据库为我们自己的插件。我们有一个自定义执行器作为插件的一部分,如果表不存在,它将创建这些表。如果有人杀死了整个数据库,那么插件数据可能不是最大的问题。我想到的第四个选项是将信息放入S3(因为您使用的是EMR,所以您可能有权访问S3)。我想到了S3选项,这是我倾向的选项。但是根据我对S3的理解,没有锁定机制,所以我想知道如果我的两个工作人员同时在S3中包含的JSON文件上记录他们的EMR集群详细信息,是否会有竞争条件。我会将其写入,以便每个作业都写入一个文件/文件夹,其中包含run_id。这将保持其唯一性,避免锁定。()难道不可能创建一个简单的DAG来查询AWS API并请求在特定时间创建的EMR集群,或者使用特定的标记?为您节省重新创建元数据存储的时间?