我在kubernetes运行了一个hadoop集群,有4个JournalNode和2个NameNode。有时,我的datanodes无法注册到namenodes。
17/06/08 07:45:32 INFO datanode.DataNode: Block pool BP-541956668-10.100.81.42-1496827795971 (Datanode Uuid null) service to hadoop-namenode-0.myhadoopcluster/10.100.81.42:8020 beginning handshake with NN
17/06/08 07:45:32 ERROR datanode.DataNode: Initialization failed for Block pool BP-541956668-10.100.81.42-1496827795971 (Datanode Uuid null) service to hadoop-namenode-0.myhadoopcluster/10.100.81.42:8020 Datanode denied communication with namenode because hostname cannot be resolved (ip=10.100.9.45, hostname=10.100.9.45): DatanodeRegistration(0.0.0.0:50010, datanodeUuid=b1babba6-9a6f-40dc-933b-08885cbd358e, infoPort=50075, infoSecurePort=0, ipcPort=50020, storageInfo=lv=-56;cid=CID-bceaa23f-ba3d-4749-a542-74cda1e82e07;nsid=177502984;c=0)
at org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager.registerDatanode(DatanodeManager.java:863)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.registerDatanode(FSNamesystem.java:4529)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.registerDatanode(NameNodeRpcServer.java:1279)
at org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolServerSideTranslatorPB.registerDatanode(DatanodeProtocolServerSideTranslatorPB.java:95)
at org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos$DatanodeProtocolService$2.callBlockingMethod(DatanodeProtocolProtos.java:28539)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:969)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2045)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2043)
上面写着: hadoop-namenode-0.myhadoopcluster/10.100.81.42:8020 Datanode denied communication with namenode because hostname cannot be resolved (ip=10.100.9.45, hostname=10.100.9.45)
不过,我可以平 hadoop-namenode-0.myhadoopcluster
, 10.100.81.42
, 10.100.9.45
在datanode和namenode中。 /etc/hosts
在datanode中:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.100.9.45 hadoop-datanode-0.myhadoopcluster.default.svc.cluster.local hadoop-datanode-0
``` `/etc/hosts` 在namenode中:
Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.100.81.42 hadoop-namenode-0.myhadoopcluster.default.svc.cluster.local hadoop-namenode-0
我已经准备好了 `dfs.namenode.datanode.registration.ip-hostname-check` 至 `false` 在 `hdfs-site.xml` 我想问题可能与dns有关。在其他类似的问题中,hadoop没有部署在kubernetes或docker容器中,所以我发布了这个。请不要标记为重复。。。
2条答案
按热度按时间w51jfk4q1#
在我的情况下,我还包括namenode和datanode的三种配置:
dfs.namenode.datanode.registratin.io-hostname-check: false
dfs.client.use.datanode.hostname: falsedfs.datanode.use.datanode.hostname: false
1hdlvixo2#
我希望你现在能找到解决这个问题的办法。上周我遇到了类似的问题,但是我的集群设置在不同的环境中,但是问题的上下文是相同的。
本质上,需要设置反向dns查找来解决此问题如果群集正在使用dns解析程序,则需要在dns服务器级别进行设置,或者如果名称节点正在查看/etc/hosts文件以查找数据节点,则需要为其中的数据节点提供任何条目。
我更新了hortonworks社区论坛帖子中的一个老问题,链接如下:https://community.hortonworks.com/questions/24320/datanode-denied-communication-with-namenode.html?childtoview=135321#answer-135321