Airflow 1.10 Config Core hostname_callable-如何设置?

时间:2018-09-10 18:03:04

标签: airflow

我对我的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())的东西吗?

2 个答案:

答案 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