запуск hadoop-dfs не создает код данных на ведомом устройстве

#hadoop #ssh #hadoop-yarn #master-slave

Вопрос:

Я пытаюсь создать кластер Hadoop на двух узлах. start-dfs.sh на моем главном узле открывается окно и вскоре после закрытия окна, и когда я выполняю start-dfs его, логи namenode правильно запускаются, но datanode нет, и регистрируются следующие :

     Problem binding to [slave-VM1:9005] java.net.BindException: Cannot assign requested address: bind; For more details see:  http://wiki.apache.org/hadoop/BindException
 

Я установил

 ssh-keygen -t rsa -P ''
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
 

(а также установите adminstrators_authorized_keys файл с правильным открытым ключом) (также работает пользователь ssh@remotemachine и предоставляет доступ к ведомому устройству)

Вот моя полная конфигурация Hadoop, установленная как на главной, так и на подчиненной машинах (Windows):

 hdfs-site.xml : 
<configuration>
    <property>
            <name>dfs.name.dir</name>
            <value>/C:/Hadoop/hadoop-3.2.2/data/namenode</value>
    </property>
<property>
  <name>dfs.datanode.https.address</name>
  <value>slaveVM1:50475</value>
</property>
    <property>
            <name>dfs.data.dir</name>
            <value>/C:/Hadoop/hadoop-3.2.2/data/datanode</value>
    </property>

    <property>
            <name>dfs.replication</name>
            <value>2</value>
    </property>
</configuration>

core-site.xml : 


<configuration>
 <property>
   <name>dfs.datanode.http.address</name>
   <value>slaveVM1:9005</value>
 </property>
 <property>
            <name>fs.default.name</name>
            <value>hdfs://masterVM2:9000</value>
  </property>
  <property>
            <name>hadoop.tmp.dir</name>
            <value>/C:/Hadoop/hadoop-3.2.2/hadoopTmp</value>
   </property>
   <property>
            <name>fs.defaultFS</name>
            <value>hdfs://masterVM2:8020</value>
   </property>
</configuration>
 

mapred-site.xml

 <configuration>
<property>
         <name>mapred.job.tracker</name>
         <value>masterVM2:9001</value>
   </property>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property> 
        <name>mapreduce.application.classpath</name>
        <value>%HADOOP_HOME%/share/hadoop/mapreduce/*,%HADOOP_HOME%/share/hadoop/mapreduce/lib/*,%HADOOP_HOME%/share/hadoop/common/*,%HADOOP_HOME%/share/hadoop/common/lib/*,%HADOOP_HOME%/share/hadoop/yarn/*,%HADOOP_HOME%/share/hadoop/yarn/lib/*,%HADOOP_HOME%/share/hadoop/hdfs/*,%HADOOP_HOME%/share/hadoop/hdfs/lib/*</value>
    </property>
</configuration>
 

yarn-site.xml

    <configuration>
    <property>
            <name>yarn.acl.enable</name>
            <value>0</value>
    </property>

    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
    </property>

    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
</configuration>
 
 

PS : я являюсь администратором на обеих машинах, и я установил HADOOP_CONF_DIR C:Hadoophadoop-3.2.2etchadoop
Я также установил подчиненный IP-адрес в hadoop_conf_dir slaves файле.

PS : если я удалю код :

 <property>
  <name>dfs.datanode.https.address</name>
  <value>slave:50475</value>
</property> 
 

От hdfs-site.xml

Затем и datanote, и namenode запускаются на главном узле.

хозяева :

 *.*.*.* slaveVM1
*.*.*.* masterVM2
 

являются IP-адресами соответствующих машин, все остальные записи закомментированы

Комментарии:

1. Вы должны сообщить, используете ли вы Windows, mac или linux. Если вы используете какие-либо специальные настройки. Я вижу, что у вас есть ссылки на » C:», так что, скорее всего, у вас работает Windows, но вы не хотите предполагать

2. да, я на Windows server 19

3. Не могли бы вы добавить записи в файл хоста?

4. смотрите мое обновление, thx

5. Можете ли вы уточнить: если вы удалите: <свойство> <свойство><имя>dfs.datanode.https.адрес<имя></имя> </имя><значение>ведомое устройство:50475<значение></значение> </значение></свойство> или </свойство><свойство> <свойство><имя>dfs.datanode.https.адрес<имя></имя> </имя><значение>slaveVM1:50475<значение></значение> </значение></свойство> или </свойство><свойство> <свойство><имя>dfs.datanode.http.адрес<имя></имя> </имя><значение>slaveVM1:9005<значение></значение> </значение></свойство> и это работает?

Ответ №1:

Обычно это происходит

Исключение BindException: Не удается назначить запрошенный адрес: привязка;

когда порт используется. Это означает, что, возможно, приложение уже запущено или было запущено ранее и не завершилось должным образом, или другое приложение использует этот порт. Попробуйте перезагрузиться (как тяжелый, но достаточно эффективный способ очистки портов).

Комментарии:

1. нет, я проверил, изменив порт (я делал это много раз, проверяя доступность выбранного порта), но это исключение все равно отображалось независимо от того, какой номер порта я использовал

2. не похоже, что ведущий пытается подключиться к ведомому устройству, какие бы конфигурации ни использовались для предоставления ведомого устройства ведущему, кроме workers файла ?