2017-02-22 39 views
1

Я настраиваю Hadoop на EC2. Для fs.default.name, fs.defaultFS, если я использую DNS для узла имени, все работает. Но если я использую публичный IP, узел имени не может начинаться с за исключением Problem binding to [54.210.86.207:9000] java.net.BindException: Cannot assign requested address;. Любое объяснение, почему работает публичный DNS, но не публичный IP-адрес?Конфигурация Hadoop на EC2: почему публичный DNS работает, но не публичный IP?

<property> 
    <name>fs.default.name</name> 
    <value>hdfs://54.210.86.207:9000</value> 
    <!-- <value>hdfs://ec2-54-210-86-207.compute-1.amazonaws.com:9000</value> --> 
    </property> 

    <property> 
    <name>fs.defaultFS</name> 
    <value>hdfs://54.210.86.207:9000</value> 
    <!-- <value>hdfs://ec2-54-210-86-207.compute1.amazonaws.com:9000</value> --> 
</property> 

ответ

2

Внутри VPC DNS-запрос общедоступного имени хоста вашего общедоступного IP-адреса вашего экземпляра делает что-то полезное - и документируется - но в противном случае потенциально неожиданно: он разрешает частный IP-адрес. Запросы извне, конечно, разрешают публичный адрес.

Мы разрешаем общедоступное имя хоста DNS для общедоступного IPv4-адреса экземпляра вне сети экземпляра и для частного IPv4-адреса экземпляра из сети экземпляра экземпляра.

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html

Вот почему именно это работает.

Публичный IP-адрес машины внутри EC2 фактически не связан с IP-стеком ОС экземпляра - только частный IP-адрес. Интернет-шлюз обрабатывает перевод 1: 1 между общедоступными и частными адресами, поскольку трафик обходит его по пути к экземпляру и из него.

И это желательно поведение, потому что вы не хотите, чтобы экземпляры разговаривали с другими экземплярами (или самими собой!), Используя их общедоступные адреса, так как вы платите транспортный сбор за данные, которые вытаскивают шпильки и обратно через Интернет Шлюз. В пределах одной зоны доступности вы не платите за трафик между экземплярами, когда используется частный IP-адрес. Кроме того, когда два экземпляра взаимодействуют друг с другом через общедоступный IP-адрес, идентификация группы безопасности источника обязательно теряется, а это означает, что вы не можете использовать идентификатор-идентификатор исходной безопасности для контроля доступа.

+0

Является ли это причиной того, почему hasoop запрещает использование ip непосредственно в conf? – sgu

+1

Да, потому что сервер фактически не знает своего общего адреса, который отображается на личном адресе по сети. –

0

Я не работал Hadoop на некоторое время, но, когда я работал с ним, не было никакой возможности ссылаться на NameNode или DataNode, имеющие лишь IP (я думаю, что это было что-то делать с обескураживающим пользователи жестко кодируют IP-адреса в случае сбоев, но я могу ошибаться). Плохая практика заключается в использовании необработанных IP-адресов, но наличие этого ограничения затрудняет работу с hadoop. Это самая близкая вещь, которую я могу найти в реальном источнике: https://issues.apache.org/jira/browse/HADOOP-685

Чтобы обойти это, вы можете либо разместить собственный DNS-сервер (dnsmasq), либо нас, или добавить записи в/etc/hosts всех машин сделать «поддельные» имена и использовать их в конфигурации. Извините, у меня нет лучшего решения для вас ...

 Смежные вопросы

  • Нет связанных вопросов^_^