Airflow 1.10 Config Core hostname_callable - Как установить? - PullRequest
0 голосов
/ 10 сентября 2018

С уважением к моему предыдущему сообщению Stackoverflow здесь Я наконец-то обновился с Airflow версии 1.9 до 1.10, поскольку теперь он выпущен на PyPi .Используя их руководство по выпуску здесь У меня работает Airflow 1.10.Теперь я проверил их обновления до 1.10, чтобы увидеть, как они исправили ошибку , обнаруженную в версии 1.9 Airflow при запуске на AWS EC2-Instance.И я обнаружил, что они заменили все функции, которые получили IP-адрес сервера, вызовом функции этого нового класса Airflow get_hostname https://github.com/apache/incubator-airflow/blob/master/airflow/utils/net.py. Теперь внутри этой маленькой функции вы видите комментарий, который гласит:

Получите имя хоста, используя вызываемый из конфига или используя socket.getfqdn в качестве запасного варианта.

Итак, после этого комментария вы видите код,

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

Это говорит нам о том, что в airflow.cfg в разделе [core] есть новое поле значения ключа под названием hostname_callable, которое теперь позволяет нам установить, как мы хотим получить IP-адрес сервера.Поэтому исправление ошибки, обнаруженной в версии 1.9 Airflow, состоит в том, чтобы просто позволить нам выбрать способ получения 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

Так что они используют вызов функции socket:getfqdn, который вызывает ошибку при запуске на AWS EC2-Instance.Мне нужно, чтобы он использовал socket.gethostbyname(socket.gethostname()) (, опять же, об этом более подробно говорится в моем предыдущем посте )

Так что мой вопрос в том, какой синтаксис мне нужно использовать, чтобы получить socket.gethostbyname(socket.gethostname()) в стиле конфигурации использования двоеточий :.Например, вызов функции socket.getfqdn() записывается в файле конфигурации как socket:getfqdn.Так что я не понимаю, как бы я написал этот синтаксис с вложенным вызовом.Буду ли я писать что-то вроде socket:gethostbyname(socket.gethostname())?

1 Ответ

0 голосов
/ 13 сентября 2018

Если бы это был я, я бы создал модуль airflow_local_settings с функцией hostname_callable, которая возвращает необходимое значение. Из кода похоже, что вы могли бы установить значение airflow_local_settings:hostname_callable.

В основном, в airflow_local_settings:

import socket

def hostname_callable():
  return socket.gethostbyname(socket.gethostname())

Затем установите модуль airflow_local_settings на компьютер, как и любой другой модуль.

...