2014-11-28 2 views
4

У меня есть 3 DataNodes и 1 NameNode на машине внутри контейнеров LXC. DataNode на том же узле, что NameNode работает нормально, но другой 2 не я получаю:hdfs Datanode запретил связь с namenode, поскольку имя хоста не может быть разрешено

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) 

в лог-файл отметить, что мой NameNode is at IP 10.0.3.112 и DataNode failing is at 10.0.3.114 в этом случае. Все конечные точки FQDN определены в файле hosts на всех узлах, и я могу выполнить ping каждый узел из всех остальных.

Что меня озадачивает, так это то, что DataNode пытается найти NameNode в 10.0.3.233, который НЕ является IP-адресом в списке или IP-адресом NameNode Почему? где эта настройка? Второй DataNode, который не работает, находится в 10.0.3.113, а также ищет другой IP (10.0.3.158), который он не может решить, потому что он не определен и не существует в моей настройке.

Узел, который работает, находится в 10.0.3.112, как имяNode, но в журнале я вижу, что он работает с src/и dst/файлами, которые являются IP-адресами вне диапазона, который я использую. так:

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 

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

Спасибо за помощь

PS: файл/и т.д./хосты выглядит следующим образом:

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 

ядро-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> 

ответ

5

После многих проблем с этой настройкой я, наконец, понял, что не так ... Несмотря на то, что моя конфигурация была права при настройке, на самом деле происходит, что resolvconf (программа) имеет тенденцию к сбросу/etc /resolv.conf и перезаписать мои настройки для поиска domain.local

Также бывает, что Cloudera и Hadoop используют различные способы определения IP-адреса, и, к сожалению, они не являются постоянными: Cloudera сначала ищет IP-адрес с использованием SSH, которые, как PING и другие программы, используют преобразователь GLIBC, но позже используют HOST, который передаёт GLIBC-преобразователь и напрямую использует DNS, включая файл/etc/hosts, и файл /etc/resolv.conf

Итак, сначала это сработает нормально, но RESOLVCONF автоматически переопределит мой домен и параметры поиска и испортит ситуацию.

В результате я удалил resolveconf из моей установки и с надлежащими файлами на месте (hosts, resolv.conf) и убедился, что HOST разрешает полное доменное имя, все в порядке. Итак, трюк состоял в том, чтобы удалить RESOLVCONF, который установлен по умолчанию, так как Ubuntu 10.04 я верю. Это, конечно, верно для локальной установки, такой как мой. При фактической настройке кластера в сети с DNS просто убедитесь, что DNS правильно разрешает узлы.

+1

Checkout ваши Iptables правил NAT слишком – AlexandruC

7

Вы можете просто изменить конфиг hdfs-site.xml из NameNode Обратите внимание на dfs.namenode.datanode.registration.ip-hostname-check

+0

или вы можете просто попробовать 2.7.3, в этой версии, сырье IP хорошо работает. – shane

Смежные вопросы