气流“此DAG在网络服务器DagBag对象中不可用”

时间:2017-01-10 03:21:55

标签: python apache workflow airflow

当我在dags文件夹中放入一个新的DAG python脚本时,我可以在DAG UI中查看DAG的新条目,但它没有自动启用。最重要的是,它似乎也没有正确加载。我只能在列表右侧点击几次“刷新”按钮,并切换列表左侧的开/关按钮,以便能够安排DAG。这些是手动过程,因为我需要触发一些东西,即使DAG脚本放在dag文件夹中。

任何人都可以帮我这个吗?我错过了什么吗?或者这是气流中的正确行为?

顺便说一句,正如帖子标题中所提到的,有一个指示符,显示“此DAG在网络服务器DagBag对象中不可用。它显示在此列表中,因为调度程序在metdata中将其标记为活动数据库“在我触发所有这个手动过程之前用DAG标题标记。

5 个答案:

答案 0 :(得分:13)

这不是你,也不是正确或预期的行为。 这是一个当前的错误'与Airflow。 Web服务器正在以一种您无法按预期方式真正使用它的方式缓存DagBag。

" Attempt removing DagBag caching for the web server"作为路线图的一部分保留在官方TODO上,表明此错误可能尚未完全解决,但以下是有关如何继续的一些建议:

仅在气流v1.9 +

中使用构建器

在气流v1.9之前,当dag由一个函数实例化时会发生这种情况,该函数被导入到实例化发生的文件中。即:使用builderfactory模式时。 github 2和JIRA 3上有关此问题的一些报告导致a fix在airflow v1.9中发布。

如果您使用的是旧版本的气流,请不要使用构建器功能。

airflow backfill重新加载缓存

正如Dmitri建议的那样,为相同的开始和结束日期运行airflow backfill '<dag_id>' -s '<date>' -e '<date>'有时会有所帮助。此后,您可能会得到Priyank指出的(非) - ,但这是预期的行为(状态:已暂停或未暂停),具体取决于您在安装中的配置。

答案 1 :(得分:7)

重新启动airflow webserver解决了我的问题。

答案 2 :(得分:2)

问题是因为默认情况下DAG以暂停状态放入DagBag中,因此调度程序在启动/重启时不会被大量的回填活动所淹没。

要解决此问题,请更改 airflow.cfg 文件中的以下设置:

# Are DAGs paused by default at creation 
dags_are_paused_at_creation = False

希望这会有所帮助。干杯!

答案 3 :(得分:1)

此错误可能会引起误解。如果按下刷新按钮或重新启动airflow webserver不能解决此问题,请检查DAG(Python脚本)是否有错误。

运行airflow list_dags可以显示DAG错误(除了列出dag之外),甚至可以尝试将dag作为普通的python脚本运行/测试。

纠正错误后,该指示灯应消失。

答案 4 :(得分:0)

我对Google Composer中出现此问题的可能原因有一种理论。有关Web服务器in troubleshooting documentation for Composer上dag失败的部分,内容为:

  

避免在DAG解析时运行重量级计算。不像   可以自定义其计算机类型的工作程序和调度程序节点   具有更大的CPU和内存容量,Web服务器使用固定的   计算机类型,如果解析时间可能导致DAG解析失败   计算太重了。

而且我正尝试从外部源加载配置(与创建DAG的其他操作相比,实际上花费的时间可忽略不计,但是仍然出现问题,因为Composer中Airflow的网络服务器在App Engine上运行,这具有奇怪的行为)

我在对此Google issue的讨论中找到了解决方法,它是使用任务创建单独的DAG,该任务加载所需的所有数据并将这些数据存储在气流变量中:

Variable.set("pipeline_config", config, serialize_json=True)

那我就可以做

Variable.get("pipeline_config", deserialize_json=True)

并从中成功生成管道。另一个好处是,由于this issue,我可以从Web服务器上获取该任务的日志。