【问题标题】:Airflow 1.10 Config Core hostname_callable - How To Set?Airflow 1.10 Config Core hostname_callable - 如何设置?
【发布时间】:2019-11-30 01:04:37
【问题描述】:

感谢我的 previous Stackoverflow post here,我终于从 Airflow 版本 1.9 升级到了 1.10,因为它现在是 released on PyPi。使用 their release guide here 我让 Airflow 1.10 正常工作。现在我检查了他们对 1.10 的更新,看看他们在 AWS EC2-Instance 上运行时如何处理the bug discovered in Airflow version 1.9。我发现他们用调用这个新 Airflow 类的函数get_hostnamehttps://github.com/apache/incubator-airflow/blob/master/airflow/utils/net.py 替换了所有获取服务器 IP 地址的函数。现在,在那个小函数中,你会看到这样的注释,

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

那么在那条评论之后你会看到代码,

callable_path = conf.get('core', 'hostname_callable')

这告诉我们在[core] 部分下的airflow.cfg 中有一个名为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 实例上运行时出现错误。我需要它来使用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())之类的东西吗?

【问题讨论】:

    标签: airflow


    【解决方案1】:

    如果是我,我会创建一个带有hostname_callable 函数的airflow_local_settings 模块,该函数返回必要的值。 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 模块安装到计算机上。

    【讨论】:

    • 天才的想法!谢谢
    • 复制这个 airflow_local_settings.py 到 lib/python 文件夹。这工作得很好。谢谢。
    【解决方案2】:

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

    我在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      相关资源
      最近更新 更多