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处于测试阶段,但我想知道我是否做错了什么。
答案 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到节点中来查找它?