Я работаю в команде, пытающейся создать систему для создания кластеров Hadoop на EC2 с минимальными усилиями со стороны пользователя. В идеале мы бы хотели, чтобы подчиненным экземплярам требовалось только имя хоста главного экземпляра в качестве пользовательских данных при загрузке. Затем ведомые устройства будут синхронизировать свои конфигурации с главным экземпляром и автоматически запускать свои демоны TaskTracker и DataNode.
У меня такой вопрос: необходимо ли, чтобы имена хостов подчиненных экземпляров были перечислены в главном экземпляре? conf/slaves
файл? Единственный раз, когда я видел, как этот файл использовался в коде для Hadoop, был start-{dfs,mapred}.sh
скрипты, которые подключаются по SSH ко всем перечисленным машинам и запускают демонов. Если демоны на подчиненных узлах запускаются автоматически, и если они знают местоположение JobTracker и NameNode (через конфигурацию), могут ли они подключаться к JobTracker / NameNode самостоятельно и с ними обращаться как с «обычными» подчиненными?
Я полагаю, что лучший способ выяснить это - попробовать, но нас интересуют затраты времени / сложность в такой системе, поэтому я подумал, что посмотрю, есть ли у кого-нибудь здесь опыт решения этой проблемы. Отредактирую, если сам найду ответ.
РЕДАКТИРОВАТЬ: Я проверил это, и вся система, кажется, работает нормально без ведомых устройств, указанных в конфигурации. JobTracker показывает подчиненный TaskTracker в списке узлов, и я успешно выполнил тестовое задание.
ДРУГОЙ РЕДАКТИРОВАНИЕ: Стоит отметить, что это не сработает, если вы используете белый список хостов DFS (conf/dfs.hosts
), которая присутствует, по крайней мере, в дистрибутиве Cloudera.
Файл ведомых устройств используется только сценариями bin / start и stop. Если вы используете EC2, вам следует проверить сценарии EC2, например, "hadoop-ec2 update-slaves-file"