hdfs Datanode refusé la communication avec namenode parce que le nom d'hôte ne peut pas être résolu
J'ai 3 DataNodes et 1 NameNode sur une machine à l'intérieur des conteneurs LXC. Le DataNode sur le même nœud que le NameNode fonctionne bien mais les 2 autres je ne reçois pas:
Initialization failed for Block pool BP-232943349-10.0.3.112-1417116665984
(Datanode Uuid null) service to hadoop12.domain.local/10.0.3.112:8022
Datanode denied communication with namenode because hostname cannot be resolved
(ip=10.0.3.233, hostname=10.0.3.233): DatanodeRegistration(10.0.3.114,
datanodeUuid=49a6dc47-c988-4cb8-bd84-9fabf87807bf, infoPort=50075, ipcPort=50020,
storageInfo=lv=-56;cid=cluster24;nsid=11020533;c=0)
dans le fichier journal
notez que mon NameNode is at IP 10.0.3.112
, et la DataNode failing is at 10.0.3.114
dans ce cas.
Tous les nœuds Complets sont définis dans le fichier hosts sur tous les nœuds, et je peux faire un ping de chaque nœud de tous les autres.
Ce qui m'intrigue, c'est ici que le DataNode est d'essayer de localiser le NameNode à 10.0.3.233
qui n'est PAS une IP dans la liste, ni l'adresse IP du NameNode
Pourquoi? où est-ce que le programme d'installation?
La deuxième DataNode qui échoue à 10.0.3.113
et recherche également une IP différente (10.0.3.158
) qu'il ne peut pas résoudre, car il n'est pas défini et n'existe pas dans mon installation.
Le nœud qui fonctionne est à 10.0.3.112
comme le NameNode, pourtant, dans le journal, je le vois, c'est de travailler avec src/et de l'heure d'été/les fichiers qui sont IPs en dehors de la gamme que j'utilise.
comme ceci:
src: /10.0.3.112:50010, dest: /10.0.3.180:53246, bytes: 60, op: HDFS_READ,
cliID: DFSClient_NONMAPREDUCE_-939581249_2253, offset: 0, srvID: a83af9ba-4e1a-47b3-a5d4-
f437ef60c287, blockid: BP-232943349-10.0.3.112-1417116665984:blk_1073742468_1644,
duration: 1685666
donc exactement ce qui se passe ici, et comment se fait que je ne peux pas atteindre le NameNode quand tous mes nœuds de voir et de résoudre les uns des autres?
Merci pour l'aide
PS: le fichier /etc/hosts ressemble à ceci:
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.0.3.1 bigdata.domain.local
192.168.10.33 bigdata.domain.local
10.0.3.111 hadoop11.domain.local
10.0.3.112 hadoop12.domain.local
10.0.3.113 hadoop13.domain.local
10.0.3.114 hadoop14.domain.local
10.0.3.115 hadoop15.domain.local
10.0.3.116 hadoop16.domain.local
10.0.3.117 hadoop17.domain.local
10.0.3.118 hadoop18.domain.local
10.0.3.119 hadoop19.domain.local
10.0.3.121 hadoop21.domain.local
10.0.3.122 hadoop22.domain.local
10.0.3.123 hadoop23.domain.local
10.0.3.124 hadoop24.domain.local
10.0.3.125 hadoop25.domain.local
10.0.3.126 hadoop26.domain.local
10.0.3.127 hadoop27.domain.local
10.0.3.128 hadoop28.domain.local
10.0.3.129 hadoop29.domain.local
core-site.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!--Autogenerated by Cloudera Manager-->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://nameservice1</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.DeflateCodec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.Lz4Codec</value>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>simple</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>false</value>
</property>
<property>
<name>hadoop.rpc.protection</name>
<value>authentication</value>
</property>
<property>
<name>hadoop.ssl.require.client.cert</name>
<value>false</value>
<final>true</final>
</property>
<property>
<name>hadoop.ssl.keystores.factory.class</name>
<value>org.apache.hadoop.security.ssl.FileBasedKeyStoresFactory</value>
<final>true</final>
</property>
<property>
<name>hadoop.ssl.server.conf</name>
<value>ssl-server.xml</value>
<final>true</final>
</property>
<property>
<name>hadoop.ssl.client.conf</name>
<value>ssl-client.xml</value>
<final>true</final>
</property>
<property>
<name>hadoop.security.auth_to_local</name>
<value>DEFAULT</value>
</property>
<property>
<name>hadoop.proxyuser.oozie.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.oozie.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.mapred.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.mapred.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.flume.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.flume.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.HTTP.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.HTTP.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hue.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hue.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.httpfs.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.httpfs.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hdfs.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hdfs.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.security.group.mapping</name>
<value>org.apache.hadoop.security.ShellBasedUnixGroupsMapping</value>
</property>
<property>
<name>hadoop.security.instrumentation.requires.admin</name>
<value>false</value>
</property>
</configuration>
hdfs-site.xml
<
!--Autogenerated by Cloudera Manager-->
<configuration>
<property>
<name>dfs.nameservices</name>
<value>nameservice1</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.nameservice1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.nameservice1</name>
<value>true</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop12.domain.local:2181,hadoop13.domain.local:2181,hadoop14.domain.local:2181</value>
</property>
<property>
<name>dfs.ha.namenodes.nameservice1</name>
<value>namenode114,namenode137</value>
</property>
<property>
<name>dfs.namenode.rpc-address.nameservice1.namenode114</name>
<value>hadoop12.domain.local:8020</value>
</property>
<property>
<name>dfs.namenode.servicerpc-address.nameservice1.namenode114</name>
<value>hadoop12.domain.local:8022</value>
</property>
<property>
<name>dfs.namenode.http-address.nameservice1.namenode114</name>
<value>hadoop12.domain.local:50070</value>
</property>
<property>
<name>dfs.namenode.https-address.nameservice1.namenode114</name>
<value>hadoop12.domain.local:50470</value>
</property>
<property>
<name>dfs.namenode.rpc-address.nameservice1.namenode137</name>
<value>hadoop14.domain.local:8020</value>
</property>
<property>
<name>dfs.namenode.servicerpc-address.nameservice1.namenode137</name>
<value>hadoop14.domain.local:8022</value>
</property>
<property>
<name>dfs.namenode.http-address.nameservice1.namenode137</name>
<value>hadoop14.domain.local:50070</value>
</property>
<property>
<name>dfs.namenode.https-address.nameservice1.namenode137</name>
<value>hadoop14.domain.local:50470</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
</property>
<property>
<name>fs.permissions.umask-mode</name>
<value>022</value>
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>false</value>
</property>
<property>
<name>dfs.domain.socket.path</name>
<value>/var/run/hdfs-sockets/dn</value>
</property>
<property>
<name>dfs.client.read.shortcircuit.skip.checksum</name>
<value>false</value>
</property>
<property>
<name>dfs.client.domain.socket.data.traffic</name>
<value>false</value>
</property>
<property>
<name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
<value>true</value>
</property>
</configuration>
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement changer la configuration de
hdfs-site.xml
de namenodeAvis de la
dfs.namenode.datanode.registration.ip-hostname-check
Après beaucoup de problèmes avec cette configuration, j'ai enfin compris ce qui n'allait pas...
Même si ma config était juste quand j'ai mis en place, il arrive effectivement que resolvconf (le programme) tend à réinitialiser le /etc/resolv.conf fichier de configuration et d'écraser mes paramètres pour domaine de recherche.local
Il arrive aussi que Cloudera Hadoop et utiliser divers moyens pour déterminer l'adresse IP, et, malheureusement, ils ne sont pas uniformes:
Cloudera première cherche IP à l'aide de SSH, qui, comme PING et d'autres programmes de l'utilisation de la GLIBC de résolution, mais plus tard, les utilisations de l'HÔTE, ce qui passe par la GLIBC résolveur et utilise les DNS directement, y compris le fichier /etc/hosts et /etc/resolv.fichier conf
Donc, au premier abord, il serait bien fonctionner, mais RESOLVCONF serait automatiquement remplacer mon domaine et les paramètres de recherche et de gâcher les choses.
J'ai fini par ENLEVER resolveconf de mon installation, et avec les fichiers appropriés sont en place (les hôtes, les resolv.conf) et de s'assurer de l'HÔTE décide pour le nom de domaine complet, c'est du tout bon.
Donc, l'astuce a été de supprimer RESOLVCONF qui est installé par défaut depuis Ubuntu 10.04 je crois.
Bien sûr, cela est vrai sur une installation locale comme le mien. Sur un cluster d'installation sur un réseau avec les DNS, assurez-vous juste les DNS résout les nœuds correctement.