Как запустить кластер 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]. В частности:
- в Dockerfile(S) сделайте switch-a-roo [1]
- вывести главный узел
- вывести узлы данных, связанные
- перед запуском datanode скопируйте файл /etc / hosts в новое расположение, /tmp / hosts
- добавьте имя главного узла и ip-адрес главного узла в новый файл hosts
надеюсь, что это работает на вас!
[1] https://github.com/dotcloud/docker/issues/2267#issuecomment-40364340