我要考虑我以前在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())吗?
这不是直接答案,但可能会帮助面临此或类似问题的人。
我在 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)
如果是我,我将创建一个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其他模块一样将模块安装到计算机上。
| 归档时间: |
|
| 查看次数: |
826 次 |
| 最近记录: |