我在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地址做错了,但我真的不确定它是什么。想法?
答案 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)