Airflow 1.10 Config Core hostname_callable-如何设置?

Kyl*_*ine 1 airflow

我要考虑我以前在Stackoverflow上发布的内容,因为它现已在PyPi上发布,所以我终于从Airflow 1.9版升级到1.10版。使用此处的发布指南,我可以使用Airflow 1.10。现在,我检查了它们到1.10的udpates,以查看它们如何解决 AWS EC2-Instance上运行时在Airflow 1.9版中发现的错误。我发现他们用对这个新的Airflow类的函数get_hostname https://github.com/apache/incubator-airflow/blob/master/airflow/utils/net.py的调用替换了获得服务器IP地址的所有函数。现在,在这个小函数中,您会看到以下注释:

使用可从配置中调用的主机名或使用socket.getfqdn作为后备来获取主机名。

因此,在该注释之后,您会看到代码,

callable_path = conf.get('core', 'hostname_callable')
Run Code Online (Sandbox Code Playgroud)

这在airflow.cfg下面的部分告诉我们,[core]有一个新的键值字段hostname_callable,该字段现在使我们可以设置如何获取服务器IP地址。因此,他们对在Airflow 1.9版中出现的错误的修复是让我们选择是否需要更改IP地址时如何获取IP地址。在此部分下的https://github.com/apache/incubator-airflow/blob/master/airflow/config_templates/default_airflow.cfg中,可以看到此新配置字段的默认值[core]。您可以看到他们将其设置为

[core]
# Hostname by providing a path to a callable, which will resolve the hostname
hostname_callable = socket:getfqdn
Run Code Online (Sandbox Code Playgroud)

因此,他们使用的函数调用socket:getfqdn会导致在AWS EC2-Instance上运行时发生错误。我需要使用它socket.gethostbyname(socket.gethostname())再次在我以前的文章中对此进行了详细介绍

所以我的问题是,为了socket.gethostbyname(socket.gethostname())使用冒号的配置样式,我需要使用什么语法:?例如,函数调用socket.getfqdn()被写入配置文件中socket:getfqdn。因此,我看不到如何通过嵌套调用编写该语法。我会写类似的东西socket:gethostbyname(socket.gethostname())吗?

Mar*_*man 6

这不是直接答案,但可能会帮助面临此或类似问题的人。

我在 macOS Catalina 上本地使用 Airflow 时遇到了类似的问题。有时(看似随机)崩溃local_task_job.py的说法

记录的主机名 mycustomhostname.local 与此实例的主机名 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa 不匹配

我可以通过编辑airflow.cfg并替换来解决这个问题

hostname_callable = socket:getfqdn
Run Code Online (Sandbox Code Playgroud)

hostname_callable = socket:gethostname
Run Code Online (Sandbox Code Playgroud)


joe*_*oeb 5

如果是我,我将创建一个airflow_local_settings带有hostname_callable返回必要值的函数的模块。从代码看来,您可以将值设置为airflow_local_settings:hostname_callable

基本上在airflow_local_settings

import socket

def hostname_callable():
  return socket.gethostbyname(socket.gethostname())
Run Code Online (Sandbox Code Playgroud)

然后像安装airflow_local_settings其他模块一样将模块安装到计算机上。