Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 运行Google';时,dag无法使用气流dag依赖项;s云构成_Google Cloud Platform_Airflow_Google Kubernetes Engine_Google Cloud Composer - Fatal编程技术网

Google cloud platform 运行Google';时,dag无法使用气流dag依赖项;s云构成

Google cloud platform 运行Google';时,dag无法使用气流dag依赖项;s云构成,google-cloud-platform,airflow,google-kubernetes-engine,google-cloud-composer,Google Cloud Platform,Airflow,Google Kubernetes Engine,Google Cloud Composer,气流允许您将dag依赖的依赖项(dag代码的外部python代码)放入dag文件夹中。这意味着这些外部python代码中的任何组件/成员或类都可以在dag代码中使用 但是,执行此操作时(在cloud compose环境的GCS dag文件夹中),依赖项的组件对dag不可用。气流Web UI中会显示与以下类似的错误:损坏的DAG:[/home/aiffort/gcs/dags/…py]没有名为tester的模块。其中tester是dags文件夹中的一个单独的python文件 当使用Google的S

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

但是,执行此操作时(在cloud compose环境的GCS dag文件夹中),依赖项的组件对dag不可用。气流Web UI中会显示与以下类似的错误:损坏的DAG:[/home/aiffort/gcs/dags/…py]没有名为tester的模块。其中tester是dags文件夹中的一个单独的python文件

当使用Google的SDK(运行实际的气流命令)测试这些任务时,任务运行得很好,但它似乎在Kubernettes的某个地方创建那些容器作业,它似乎也没有接管依赖关系


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

来自配置气流的官方文档:

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

在这个文件中,设置在第一个设置中

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

气流的基本路径。

您正在寻找如何安装Python依赖项吗


此外,位于GCS存储桶中的DAGs文件夹(
gcloud beta composer environments description[environment]
以获取此存储桶;gs://{composer bucket}/DAGs)应映射到pods中的/home/aiffort/GCS/DAGs。您是否尝试过通过搜索节点来查找此文件?

您应该将模块放在一个单独的文件夹中,该文件夹包含一个_init ___;.py文件(Airflow不喜欢其顶级DAGs目录中的__init __;.py文件)

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

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

您可以从my_deps import dep_a、dep_b在
my_dag.py
中写入

我也遇到了同样的问题,并在邮件列表中帮助解决了它。如需参考,请参阅此处的线程:。这里有一个链接,指向一个方便的Github要点,并附有一些评论

为了将您自己的依赖项写入并导入DAG,您需要压缩DAG及其依赖项,如下所述:

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

确保您的依赖项是位于
dags
目录顶层的包,而不是模块

from foo_dep.foo_dep import my_utility_函数
将在此处工作:

foo_dag.py
foo_dep/__init__.py
foo_dep/foo_dep.py
from foo_dep import my_utility_函数
似乎应该与以下dags目录结构一起工作(并且将在本地工作),但它不会在气流中工作:


您确定这些依赖项被忽略了吗?或者可能是气流基本目录/Python路径不包括
/home/aiffair/gcs/dags
?我不确定Python路径中是否包括/home/aiffair/gcs/dags,可能不是,但由于Composer使用Kubernettes,我不认为这是我可以控制的,我也不确定Airflow base dir,这是您可以在配置文件中控制的吗?请原谅我的无知,我是新来的气流。是的,这是正确设置的谷歌的作曲家和依赖关系是在该目录。这就是为什么当您在这些DAG中测试任务时,它们会以正确的依赖关系传递。在Kubernettes编排的实际dag运行期间,这些依赖项被忽略。@SorooshAvazkhani与Kubernetes的合作不多。了解dag运行的具体情况会很有趣。配置是否被忽略?它是另一个节点,并且文件结构不同,因此可能需要相对路径吗?可以公开某种相对文件路径吗?Kubernetes应该知道Python路径吗?我现在正试图了解dag运行。请确保节点上不存在文件结构/home/afflow/gcs/dags。一旦我知道Kubernetts是如何从这些DAG创建工作负载的,我就会发回,但看起来它们只是接管了DAG本身,而不是依赖关系。解决这个问题的一种方法是将依赖项编写为Airlow插件,您可以将其添加到Composer环境中,但在我看来,这是它们的一个基本缺陷。不过,我也可能在做一些愚蠢的事情。不是pypi包,只是我放在Dag文件夹中的一个外部python文件。我ssh进入的节点/home/afflow/gcs/dags不存在,应该吗?应该;您可以指向该文件(可能不在DAG/文件夹中,但可能在数据/文件夹中)?当您
gcloud beta composer环境描述[您的环境]
时,是否看到指向GCS存储桶的链接?这个存储桶应该存放你的DAG。我认为你的问题是你把文件放在DAG文件夹中。您的环境被配置为尝试将该目录中的所有内容解析为DAG,这就是为什么会出现DAG已损坏的错误!将文件放在数据/目录中应该可以做到这一点。:)如何调用dependency在这种情况下,dep_a.py依赖于dep_b.py中定义的某个函数,my_dag中的python运算符调用可在dep_a.py中调用的python_。在dep_a中,您可以从dep_b import foo中
。在my_dag中,来自my_deps import dep a的
;dep_a.一些可调用()
应该可以工作。上面这些对于DAG来说非常有用,但是插件呢?为/plugins目录遵循相同的逻辑似乎不起作用。我有/plugins/plugin.py和/plugins/dependencies/dep_a并调用
导入依赖项。dep_a
失败。除了/plugins目录外,我在所有目录中都有init.py。
foo_dag.py
foo_dep.py