Как запустить кластер HDFS без DNS

Я создаю локальную среду разработки HDFS (на самом деле hadoop + mesos + zk + kafka), чтобы облегчить разработку заданий Spark и облегчить локальное интегрированное тестирование. Все остальные компоненты работают нормально, но у меня проблемы с HDFS. Когда узел данных пытается подключиться к узлу name, я получаю DisallowedDataNodeException:

org.apache.hadoop.hdfs.server.protocol.DisallowedDatanodeException: Datanode denied communication with namenode

большинство вопросов, связанных с той же проблемой, сводятся к разрешению имен узла данных на узле имени либо статическому через etc/hosts файлы или использование dns. Статическое разрешение не является опцией docker, так как я не знаю узлы данных при создании контейнера узла name. Я хотел бы избежать создания и поддержания дополнительной службы DNS. В идеале, я хотел бы подключить все, используя --link характеристика докер.

есть ли способ настроить HDFS таким образом, чтобы он использовал только IP-адреса для работы?

я нашел это свойство и установил false, но он не сделал трюк:

dfs.namenode.datanode.registration.ip-hostname-check (по умолчанию: правда)

есть ли способ иметь многоузловой локальный кластер HDFS, работающий только с использованием IP-адресов и без использования DNS?

1 ответов


Я бы посмотрел на перенастройку вашего образа Docker для использования другого файла hosts [1]. В частности:

  1. в Dockerfile(S) сделайте switch-a-roo [1]
  2. вывести главный узел
  3. вывести узлы данных, связанные
  4. перед запуском datanode скопируйте файл /etc / hosts в новое расположение, /tmp / hosts
  5. добавьте имя главного узла и ip-адрес главного узла в новый файл hosts

надеюсь, что это работает на вас!

[1] https://github.com/dotcloud/docker/issues/2267#issuecomment-40364340