Hadoop: java. net. UnknownHostException: hadoop-slave-2


J'ai créé un cluster hadoop avec 1 Maître et 2 Esclaves. Je l'exécute avec des spécifications minimales dans le * - site.des fichiers xml.

site principal.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://10.0.0.51:9000</value>
    </property>
</configuration>

hfds-site.xml

<configuration>
    <property>
        <name>dfs.datanode.name.dir</name>
        <value>~/DNfiles</value>
    </property>
</configuration>

carte-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

fil-site.xml

<configuration>

    <!-- Site specific YARN configuration properties -->

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>10.0.0.51:8025</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>10.0.0.51:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>10.0.0.51:8050</value>
    </property>
</configuration>

Le problème est que je suis capable de formater namenode, de mettre des fichiers dans hfs et tout sauf lorsque j'exécute un exemple simple, j'obtiens l'erreur suivante.

Container launch failed for container_1455133326738_0002_02_000007 : java.lang.IllegalArgumentException: java.net.UnknownHostException: hadoop-slave-2 at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:377)
    at org.apache.hadoop.security.SecurityUtil.setTokenService(SecurityUtil.java:356)
    at org.apache.hadoop.yarn.util.ConverterUtils.convertFromYarn(ConverterUtils.java:238)
at org.apache.hadoop.yarn.client.api.impl.ContainerManagementProtocolProxy$ContainerManagementProtocolProxyData.newProxy(ContainerManagementProtocolProxy.java:266)
 at org.apache.hadoop.yarn.client.api.impl.ContainerManagementProtocolProxy$ContainerManagementProtocolProxyData.<init>(ContainerManagementProtocolProxy.java:244)
    at org.apache.hadoop.yarn.client.api.impl.ContainerManagementProtocolProxy.getProxy(ContainerManagementProtocolProxy.java:129)
    at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl.getCMProxy(ContainerLauncherImpl.java:409)
    at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl$Container.launch(ContainerLauncherImpl.java:138)
    at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl$EventProcessor.run(ContainerLauncherImpl.java:375)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.UnknownHostException: hadoop-slave-2

Alors que les programmes continue à finir en travaillant avec un autre esclave, c'est-à-dire que 1 esclave est accessible mais que d'autres ne l'sont pas bien qu'ils aient les mêmes configurations. Comme je suis capable de formater et tout, je suppose que mon fichier /etc/hosts dans le nœud maître est correct. Voici son extrait.

ubuntu@hadoop-master-1:~/hadoop-2.7.1/bin$ cat /etc/hosts
127.0.0.1 localhost
10.0.0.51 hadoop-master-1
10.0.0.36 hadoop-slave
10.0.0.38 hadoop-slave-2
10.0.0.39 hadoop-slave-1
10.0.0.40 hadoop-slave-3
10.0.0.41 hadoop-slave-4

Fichier hôte pour esclave

ubuntu@hadoop-slave-1:~/hadoop-2.7.1/bin$ cat /etc/hosts
127.0.0.1 localhost
10.0.0.39 hadoop-slave-1
10.0.0.51 hadoop-master-1

Quelqu'un a-t-il une idée de ce qui pourrait être le problème? Toute aide ou pointeurs possibles seront très appréciés.

Author: user3335966, 2016-02-10

1 answers

Le problème réside dans le fichier /etc/hosts des esclaves. La raison pour laquelle il n'y a pas eu d'erreurs lors de la mise en fichier et du formatage namenode est que le maître communique à tous les esclaves et qu'il a des adresses IP pour tous. Mais une fois que vous exécutez une application sur le cluster, le maître d'application est créé sur l'un des esclaves. Suis alors par esclave doit communiquer avec d'autres esclaves. Étant donné que le fichier hôte de l'esclave n'a pas son adresse (à en juger par le fichier hosts posté pour les esclaves), il est donner une erreur d'hôte inconnu.

En règle générale, assurez-vous que tous les nœuds du cluster ont des adresses IP à tous les autres nœuds du cluster. Corrigez ceci et l'erreur devrait disparaître.

 4
Author: Gurinderbeer Singh, 2016-02-11 20:46:58