计划程序不更新软件包文件

时间:2018-06-28 10:27:38

标签: airflow airflow-scheduler google-cloud-composer

我正在Cloud Composer上开发DAG;我的代码分成一个主python文件和一个带有子文件夹的包,看起来像这样:

my_dag1.py
package1/__init__.py
package1/functions.py
package1/package2/__init__.py
package1/package2/more_functions.py

我更新了package1/functions.py上的一个函数以使用附加参数(并更新了my_dag1.py中的引用)。该代码将在我的本地环境上正确运行,并且在运行时没有出现任何错误

gcloud beta composer environments run my-airflow-environment list_dags --location europe-west1

但是Web UI引发了python错误

  

TypeError:my_function()获得了意外的关键字参数   'new_argument'


  • 我尝试重命名该函数,并且错误更改为 NameError: name 'my_function' is not defined

  • 我尝试更改DAG的名称,并将文件上传到压缩和解压缩的dag文件夹中,但是没有任何效果。

仅在重命名软件包文件夹后,错误消失了。


我怀疑问题与调度程序启动my_dag1.py而不是package1/functions.py有关。由于我在前几周进行了类似的更新,因此错误无处不在。

关于在不重构整个代码结构的情况下如何解决此问题的任何想法?


EDIT-1

Here's the link到Google网上论坛的相关讨论

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。 Web UI中不会消除“ Broken DAG”错误。我猜这是AirFlow的Web服务器中的缓存错误。

  • 背景。

    1. 我创建了具有Airflow Plugin功能的自定义运算符。
    2. 导入定制的运算符后,气流Web UI保持显示Broken DAG错误,表明它找不到定制的运算符。
  • 为什么我认为这是Web服务器气流中的错误?

    1. 我可以使用命令airflow test手动运行DAG,因此导入应该正确。
    2. 即使我从气流的/dags/文件夹中删除了相关的DAG文件,错误仍然存​​在。
  • 这是我为解决此问题所做的事情。

    1. 重新启动气流Web服务。 (有时您只能通过此方法解决问题)。
    2. 确保没有DAG正在运行,重新启动气流调度程序服务。
    3. 确保没有DAG正在运行,重新启动airflow worker

希望它可以帮助遇到相同问题的人。

答案 1 :(得分:0)

尝试重新启动网络服务器:

gcloud beta composer environments restart-web-server ENVIRONMENT_NAME --location=LOCATION