运行Google的Cloud Compose时,无法使用气流dag依赖项

时间:2018-05-16 15:36:07

标签: google-cloud-platform airflow google-kubernetes-engine google-cloud-composer

Airflow允许您将依赖项(外部python代码添加到dag代码中)放在dag文件夹中。这意味着这些外部python代码中的任何组件/成员或类都可以在dag代码中使用。

当这样做时(在云组合环境的GCS dag文件夹中),依赖项的组件不可用于dags。 Airflow Web UI中显示类似于以下内容的错误:已损坏的DAG:[/ home / airflow / gcs / dags / .py]没有名为tester的模块。其中tester是dags文件夹中的一个单独的python文件。

使用Google的SDK(运行实际的Airflow命令)测试这些任务时,任务运行正常但是在Kubernettes中创建这些容器作业的某个地方,它似乎也没有接管依赖项。

我意识到Cloud Compose处于测试阶段,但我想知道我是否做错了什么。

4 个答案:

答案 0 :(得分:3)

您应该将模块放在包含__init__.py文件的单独文件夹中(Airflow不喜欢其顶级DAG目录中的__init__.py文件)。

例如,如果您具有以下目录结构:

dags/
    my_dag.py
    my_deps/
        __init__.py
        dep_a.py
        dep_b.py

您可以在from my_deps import dep_a, dep_b中撰写my_dag.py

答案 1 :(得分:1)

我遇到了同样的问题,并在邮件列表上帮助解决了这个问题。供参考,请参阅此处的主题:https://groups.google.com/forum/#!topic/cloud-composer-discuss/wTI7Pbwc6ZY。这里有一个方便的Github Gist链接,并附有一些评论。

为了将您自己的依赖项编写并导入DAG,您需要按照此处所述压缩您的dag及其依赖项:https://airflow.apache.org/concepts.html?highlight=zip#packaged-dags

您可以将该zip文件直接上传到您的Cloud Composer GCS存储桶,Airflow会将其取出。

确保您的依赖项是Book.characters.create(attributes)目录顶层的包,而不是模块。

dags可以在这里工作:

from foo_dep.foo_dep import my_utility_function

foo_dag.py foo_dep/__init__.py foo_dep/foo_dep.py 似乎应该可以使用以下dags目录结构(并且可以在本地工作),但它在Airflow 中不起作用:

from foo_dep import my_utility_function

答案 2 :(得分:0)

关于配置Airflow的官方文档:

  

第一次运行Airflow时,它会在$ AIRFLOW_HOME目录中创建一个名为airflow.cfg的文件(默认情况下为〜/ airflow)。此文件包含Airflow的配置,您可以对其进行编辑以更改任何设置

在此文件中设置第一个设置

[core]
# The home folder for airflow, default is ~/airflow
airflow_home = /home/airflow/gcs/dags

Airflow的基本路径。

答案 3 :(得分:0)

您在寻找如何安装Python依赖项吗? https://cloud.google.com/composer/docs/how-to/using/installing-python-dependencies

此外,存储在GCS存储桶中的DAGs文件夹(gcloud beta composer environments describe [environment]以获取此存储桶; gs:// {composer-bucket} / dags)应映射到您的/ home / airflow / gcs / dags豆荚。您是否尝试过SSH到节点中来查找它?