我对我的previous Stackoverflow post here感到很满意,因为我现在已经从released on PyPi升级到了Airflow 1.9版到1.10版。使用their release guide here使Airflow 1.10正常运行。现在,我检查了它们到1.10的udpates,以查看它们在AWS EC2-Instance上运行时如何解决the bug discovered in Airflow version 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')
在airflow.cfg
下的[core]
中,我们告诉我们有一个名为hostname_callable
的新键值字段,该字段现在使我们可以设置如何获取服务器IP地址。因此,他们对在Airflow 1.9版中出现的错误的修复是让我们选择是否需要更改IP地址时如何获取IP地址。在[core]
下的https://github.com/apache/incubator-airflow/blob/master/airflow/config_templates/default_airflow.cfg中可以看到此新配置字段的默认值。您可以看到他们将其设置为
[core]
# Hostname by providing a path to a callable, which will resolve the hostname
hostname_callable = socket:getfqdn
因此,他们使用的功能调用socket:getfqdn
会导致在AWS EC2-Instance上运行时发生错误。我需要它来使用socket.gethostbyname(socket.gethostname())
(again this is mentioned in more detail on my previous post)
所以我的问题是,要使socket.gethostbyname(socket.gethostname())
成为使用冒号:
的配置样式,我需要使用什么语法?例如,功能调用socket.getfqdn()
被写为socket:getfqdn
在配置文件中。因此,我看不到如何通过嵌套调用编写该语法。我会写类似socket:gethostbyname(socket.gethostname())
的东西吗?
答案 0 :(得分:2)
如果是我,我将创建一个带有airflow_local_settings
函数的hostname_callable
模块,该函数返回必要的值。 From the code it looks like you could将值设置为airflow_local_settings:hostname_callable
。
基本上,在airflow_local_settings
中:
import socket
def hostname_callable():
return socket.gethostbyname(socket.gethostname())
然后将airflow_local_settings
模块安装到计算机上,就像安装其他模块一样。
答案 1 :(得分:1)
这不是直接的答案,但可能会帮助面临此问题或类似问题的人。
在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
使用
hostname_callable = socket:gethostname