另一个“此DAG在Web服务器的DagBag对象中不可用”

时间:2018-10-22 17:22:56

标签: airflow

这似乎是一个相当普遍的问题。我有一个DAG,不仅可以用airflow trigger_dag手动触发它,而且它甚至可以按照其时间表执行,但它拒绝显示在UI中。

我已经多次重启Web服务器和调度程序,按十亿次按“刷新”,然后通过airflow backfill运行它。还有其他想法吗?我还可以提供其他相关信息吗?

我正在使用Airflow 1.9.0。

1 个答案:

答案 0 :(得分:1)

最近几个小时,我一直在调试这个确切的问题。这似乎是由于DAG中的无提示错误所致。把我的笔记留给下一个可怜的灵魂。

因此,在我的情况下,此错误是由于DAG中的以下代码块引起的:

此操作失败:

def read_lakes_id_file_simple():
    LAKES_ID_FILE = "/home/airflow/gcs/data/lakes_to_monitor.json"
    with open(LAKES_ID_FILE) as json_file:
        data = json.load(json_file)
    return data

通过:

def read_lakes_id_file_simple():
    try:
        LAKES_ID_FILE = "/home/airflow/gcs/data/lakes_to_monitor.json"
        with open(LAKES_ID_FILE) as json_file:
            data = json.load(json_file)
        return data
    except Exception as e:
        return 'LOTS OF LAKES'

因此,我猜第一个在调度程序读取/检查时以某种方式失败,也许是因为它找不到文件或其他原因,而第二个成功了,因为它是由工作程序在正确的路径中运行的。 (或者可能是其他情况。)似乎很清楚的是,加载/运行DAG时有两种不同的运行和行为,一种无声地失败,而另一种成功。

这会导致异常行为,例如DAG第一次运行正常,然后从Airflow Web界面消失。

因此,我建议您在可能符合要求的内容中添加try/except,作为调试代码的一种方法。