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>
Примечание. Перед началом модификации остановите агент и сервер следующим образом:
- остановка службы cloudera-scm-agent
- служба cloudera-scm-server stop
Если в вашем кластере настроены первичные и вторичные узлы имен, эта модификация должна выполняться на обоих узлах. Модификация выполняется с server and agent stopped
После завершения и сохранения в hdfs-site.xml
файл запуска сервера и агента по NameNodes и также агент на DataNodes (это не повредит, если кластер делается тоже), используя следующее:
- служба cloudera-scm-агент запуска
- служба 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.
Запуск, остановка, обновление и перезапуск кластера Запуск, остановка и перезапуск служб