Hadoop Datanodes找不到NameNode

时间:2012-01-15 19:52:03

标签: networking ubuntu hadoop port

我在VirtualBox中设置了一个分布式Hadoop环境:4个虚拟Ubuntu 11.10安装,一个用作主节点,另外三个用作从属。我跟着this tutorial启动并运行单节点版本,然后转换为完全分布式版本。当我跑11.04时它工作得很好;但是,当我升级到11.10时,它就破了。现在我的所有奴隶的日志显示以下错误消息,重复广告:

INFO org.apache.hadoop.ipc.Client: Retrying connect to server: master/192.168.1.10:54310. Already tried 0 time(s).
INFO org.apache.hadoop.ipc.Client: Retrying connect to server: master/192.168.1.10:54310. Already tried 1 time(s).
INFO org.apache.hadoop.ipc.Client: Retrying connect to server: master/192.168.1.10:54310. Already tried 2 time(s).

等等。我在Internet(和StackOverflow)上发现了此错误消息的其他实例,但没有一个解决方案有效(尝试将core-site.xml和mapred-site.xml条目更改为IP地址而不是比主机名;所有从站和主站上的四重检查/etc/hosts;主站可以无密码SSH到所有从站中。我甚至尝试将每个从设备还原为单节点设置,在这种情况下它们都可以正常工作(在这种情况下,主设备始终可以正常工作,无论是Datanode还是Namenode)。

我发现的唯一一个似乎能带头的症状是来自任何一个奴隶,当我尝试telnet 192.168.1.10 54310时,我得到Connection refused,暗示有一些规则阻止访问(当我升级到11.10时必须生效。)

但我的/etc/hosts.allow并未改变。我尝试了规则ALL: 192.168.1.,但它没有改变行为。

哦,是的,主人netstat清楚地显示tcp端口54310和54311正在监听。

任何人都有任何建议让奴隶Datanodes识别Namenode吗?

编辑#1 :在使用nmap进行一些讨论时(请参阅此帖子的评论),我认为问题出在我的/etc/hosts文件中。这是为主VM列出的内容:

127.0.0.1    localhost
127.0.1.1    master
192.168.1.10 master
192.168.1.11 slave1
192.168.1.12 slave2
192.168.1.13 slave3

对于每个从属VM:

127.0.0.1    localhost
127.0.1.1    slaveX
192.168.1.10 master
192.168.1.1X slaveX

不幸的是,我不确定我改变了什么,但NameNode现在总是死了,除了试图绑定一个“已经在使用”的端口(127.0.1.1:54310)。我显然对主机名和IP地址做错了,但我真的不确定它是什么。想法?

6 个答案:

答案 0 :(得分:38)

我找到了!通过注释掉/etc/hosts文件的第二行(具有127.0.1.1条目的文件),netstat显示绑定到192.168.1.10地址而不是本地地址的NameNode端口,从属VM发现了它。 Ahhhhhhhh。谜团已揭开!感谢大家的帮助。

答案 1 :(得分:5)

这个解决方案对我有用。即确保您在core-site.xml和mapred-site.xml中使用的名称:

<property>
   <name>fs.default.name</name>
   <value>hdfs://master:54310</value>
   <final>true</final>
 </property>

即。 master在/ etc / hosts中定义为BOTH主节点和从节点上的xyz.xyz.xyz.xyz master。 然后重新启动namenode并检查使用 netstat -tuplen 并看到它绑定到“外部”IP地址

tcp        0      xyz.xyz.xyz.xyz:54310         0.0.0.0:*                   LISTEN      102        107203     - 

而非本地IP 192.168.x.y或127.0.x.y

答案 2 :(得分:3)

我遇到了同样的麻烦。 @Magsol解决方案有效但应该注意的是需要注释掉的条目是

127.0.1.1 masterxyz

主机上的

,而不是奴隶上的127.0.1.1,尽管我也这样做了。你需要为hadoop stop-all.sh和start-all.sh,可能很明显。

重新启动hadoop后,请在此处检查nodemaster:http://masterxyz:50030/jobtracker.jsp

并查看可用于作业的节点数。

答案 3 :(得分:1)

虽然此响应不是作者正在寻找的解决方案,但其他用户可能会在此页面上进行思考,因此如果您使用AWS设置群集,则可能是ICMP安全规则尚未启用在AWS Security Groups页面中。请看以下内容:Pinging EC2 instances

以上解决了从数据节点到主节点的连接问题。确保您可以在每个实例之间执行ping操作。

答案 4 :(得分:1)

我也遇到过类似的问题。 (我使用的是ubuntu 17.0) 我只在/etc/hosts文件中保留了主服务器和从服务器的条目。 (在主机和从机中)

127.0.0.1  localhost
192.168.201.101 master
192.168.201.102 slave1
192.168.201.103 slave2

其次,> sudo gedit /etc/hosts.allow 并添加条目:ALL:192.168.201.

第三,使用sudo ufw disable

禁用防火墙

最后,我从群集中的所有节点中删除了namenode和datanode文件夹,然后重新运行

$HADOOP_HOME/bin> hdfs namenode -format -force
$HADOOP_HOME/sbin> ./start-dfs.sh
$HADOOP_HOME/sbin> ./start-yarn.sh

从命令行检查健康报告(我建议)

$HADOOP_HOME/bin> hdfs dfsadmin -report

我让所有节点都正常工作。

答案 5 :(得分:0)

我正在运行一个2节点集群。

192.168.0.24主人 192.168.0.26 worker2

我遇到了同样的问题:重试连接到服务器:master / 192.168.0.24:54310在我的worker2机器日志中。但上面提到的人遇到运行此命令的错误 - telnet 192.168.0.24 54310.但是,在我的情况下,telnet命令工作正常。然后我检查了我的/ etc / hosts文件

master / etc / hosts
127.0.0.1 localhost
192.168.0.24 ubuntu
192.168.0.24主人 192.168.0.26 worker2

worker2 / etc / hosts
127.0.0.1 localhost
192.168.0.26 ubuntu
192.168.0.24主人 192.168.0.26 worker2

当我在master上点击http://localhost:50070时,我看到了Live节点:2。但是当我点击它时,我只看到一个是master的数据节点。我检查了master和worker2上的jps。 Datanode进程正在两台机器上运行。

经过多次试验和错误后,我意识到我的master和worker2机器具有相同的主机名“ubuntu”。我将worker2的主机名从“ubuntu”更改为“worker2”,并从worker2机器中删除了“ubuntu”条目。

注意:要更改主机名,请使用sudo编辑/ etc / hostname。

宾果!它工作:)我能够在dfshealth UI页面上看到两个数据节点(locahost:50070)