2012-01-15 50 views
21

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

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

你正在运行防火墙吗?另外,师父的IP仍然是192.168.1.10?愚蠢的问题,但有时人们会错过显而易见的东西。 – 2012-01-16 04:34:45

+0

使用'sudo apt-get install gufw'命令安装gufw并检查防火墙设置。另请查看[VirtualBox](http://www.virtualbox.org/manual/ch06.html)中的[网络连接类型](http://www.virtualbox.org/manual/ch06.html)。 – 2012-01-16 04:43:33

+0

'任何人都有任何建议让奴隶Datanodes识别Namenode?' - 这是一个Ubuntu查询而不是Hadoop吗?它应该是“如何让从VM与主VM交谈”。 – 2012-01-16 06:29:42

回答

36

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

+0

感谢队友,我一直在尝试这个,那几个小时...有同样的问题。欢呼 – 2013-06-16 21:30:14

+0

你的意思是说,评论127.0.0.1与本地localhost.localdomain的IP ...? – Techiee 2017-03-13 20:25:33

+0

不,127.0.1.1条目。 – Magsol 2017-03-13 20:47:54

3

我有同样的麻烦。 @Magsol解决方案的工作,但应该指出的是,需要被注释掉的条目是

127.0.1.1 masterxyz

主计算机上,而不是从127.0.1.1的,虽然我没有太。你也需要stop-all.sh和hadoop的start-all.sh,可能很明显。

一旦你重新启动的Hadoop检查这里的nodemaster:http://masterxyz:50030/jobtracker.jsp

,并期待在可供作业的节点的数量。

+1

感谢pferrel明确表示它只是在localhost上循环的namenode,我们只需修改/ etc/hosts(删除127.0.1.1)并重新启动所有hadoop进程即可。 – user1501382 2015-02-01 05:40:48

5

此解决方案适用于我。即确保您在核心site.xml的财产使用和mapred-site.xml中的名称:

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

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

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

和非本地IP类似192.168.xy或127.0.xy

1

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

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

0

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

192.168.0.24主
192.168.0.26 worker2

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

主/ etc/hosts中
127.0.0.1本地主机
192.168.0.24的Ubuntu
192.168.0.24主
192.168.0.26 worker2

worker2的/ etc /承载
127.0.0.1本地主机
192.168.0.26的ubuntu
192.168.0.24主
192.168.0.26 worker2

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

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

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

宾果!它工作:)我可以看到dfshealth UI页面上的两个datanode(locahost:50070)

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

最后防火墙,我删除两者名称节点和数据节点文件夹从簇中的所有节点,并重新运行

$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 

,我得到了所有节点正常工作。