Hadoop: привязка нескольких IP-адресов к кластеру NameNode

У меня есть кластер Hadoop с четырьмя node на Softlayer. Мастер (NameNode) имеет общедоступный IP-адрес для внешнего доступа и частный IP-адрес для доступа к кластеру. Ведомые узлы (datanodes) имеют частный IP-адрес, который я пытаюсь подключить к мастеру, не требуя назначения публичных IP-адресов каждому подчиненному устройству node.

Я понял, что установка fs.defaultFS на общедоступный адрес NameNode позволяет использовать внешний доступ, за исключением того, что NameNode только прослушивает этот адрес для входящих соединений, а не частный адрес. Поэтому я получаю исключения ConnectionRefused в журналах данных, поскольку они пытаются подключиться к частному IP-адресу NameNode.

Я решил, что решение может заключаться в том, чтобы установить как открытый, так и закрытый IP-адрес в NameNode, чтобы внешний доступ сохранялся и позволял моим подчиненным узлам также подключаться.

Итак, есть ли способ привязать оба этих адреса к NameNode, чтобы он прослушивал оба?

Изменить: версия Hadoop 2.4.1.

Ответ 1

Ответчик отредактировал это в своем вопросе как ответ:

В hdfs-site.xml установите значение dfs.namenode.rpc-bind-host в 0.0.0.0, и Hadoop будет слушать как частные, так и общественные сетевые интерфейсы, обеспечивающие удаленный доступ и доступ к данным.

Ответ 2

Поддержка HDFS для многосетевых сетей и была выполнена на основе поддержки Cloudera HDFS для многосетевых сетей. Параметры для Multi-Homing для Hortonworks

<property>
  <name>dfs.namenode.rpc-bind-host</name>
  <value>0.0.0.0</value>
  <description>
    The actual address the RPC server will bind to. If this optional address is
    set, it overrides only the hostname portion of dfs.namenode.rpc-address.
    It can also be specified per name node or name service for HA/Federation.
    This is useful for making the name node listen on all interfaces by
    setting it to 0.0.0.0.
  </description>
</property>

Кроме того, рекомендуется изменить dfs.namenode.rpc-bind-host, dfs.namenode.servicerpc-bind-host, dfs.namenode.http-bind-host и dfs.namenode.https-bind-host

По умолчанию конечные точки HDFS указываются как имена хостов или IP-адреса. В любом случае демоны HDFS будут привязаны к одному IP-адресу, что сделает демоны недоступными из других сетей.

Решение состоит в том, чтобы иметь отдельную настройку для конечных точек сервера, чтобы принудительно связывать подстановочный IP-адрес INADDR_ANY, т.е. 0.0.0.0. НЕ указывайте номер порта с этими настройками.

ПРИМЕЧАНИЕ. Предпочитайте использовать имена хостов через IP-адреса в файлах конфигурации master/slave.

<property>
  <name>dfs.namenode.rpc-bind-host</name>
  <value>0.0.0.0</value>
  <description>
    The actual address the RPC server will bind to. If this optional address is
    set, it overrides only the hostname portion of dfs.namenode.rpc-address.
    It can also be specified per name node or name service for HA/Federation.
    This is useful for making the name node listen on all interfaces by
    setting it to 0.0.0.0.
  </description>
</property>

<property>
  <name>dfs.namenode.servicerpc-bind-host</name>
  <value>0.0.0.0</value>
  <description>
    The actual address the service RPC server will bind to. If this optional address is
    set, it overrides only the hostname portion of dfs.namenode.servicerpc-address.
    It can also be specified per name node or name service for HA/Federation.
    This is useful for making the name node listen on all interfaces by
    setting it to 0.0.0.0.
  </description>
</property>

<property>
  <name>dfs.namenode.http-bind-host</name>
  <value>0.0.0.0</value>
  <description>
    The actual adress the HTTP server will bind to. If this optional address
    is set, it overrides only the hostname portion of dfs.namenode.http-address.
    It can also be specified per name node or name service for HA/Federation.
    This is useful for making the name node HTTP server listen on all
    interfaces by setting it to 0.0.0.0.
  </description>
</property>

<property>
  <name>dfs.namenode.https-bind-host</name>
  <value>0.0.0.0</value>
  <description>
    The actual adress the HTTPS server will bind to. If this optional address
    is set, it overrides only the hostname portion of dfs.namenode.https-address.
    It can also be specified per name node or name service for HA/Federation.
    This is useful for making the name node HTTPS server listen on all
    interfaces by setting it to 0.0.0.0.
  </description>
</property>

Примечание. Перед началом модификации остановите агент и сервер следующим образом:

  1. остановка службы cloudera-scm-agent
  2. служба cloudera-scm-server stop

Если в вашем кластере настроены первичные и вторичные узлы имен, эта модификация должна выполняться на обоих узлах. Модификация выполняется с server and agent stopped

После завершения и сохранения в hdfs-site.xml файл запуска сервера и агента по NameNodes и также агент на DataNodes (это не повредит, если кластер делается тоже), используя следующее:

  1. служба cloudera-scm-агент запуска
  2. служба cloudera-scm-server start

То же решение может быть реализовано для IBM BigInsights:

    To configure HDFS to bind to all the interfaces , add the following configuration variable using Ambari under the section HDFS
-> Configs ->Advanced -> Custom hdfs-site


    dfs.namenode.rpc-bind-host = 0.0.0.0

    Restart HDFS to apply the configuration change . 

    Verify if port 8020 is bound and listening to requests from all the interfaces using the following command. 

    netstat -anp|grep 8020
    tcp 0 0 0.0.0.0:8020 0.0.0.0:* LISTEN 15826/java

IBM BigInsights: как настроить клиентский порт Hadoop 8020 для привязки ко всем сетевым интерфейсам?

В Cloudera в конфигурации HDFS есть свойство, называемое

В HDFS configuration в Cloudera есть свойство, называемое Bind NameNode to Wildcard Address и просто нужно установить флажок, и оно будет привязывать службу к 0.0.0.0.

then restart hdfs service

 On the Home > Status tab, click  to the right of the service
 name and select Restart. Click Start on the next screen to confirm.
 When you see a Finished status, the service has restarted.

Запуск, остановка, обновление и перезапуск кластера Запуск, остановка и перезапуск служб