Hadoop Datanodes 找不到 NameNode

Posted

技术标签:

【中文标题】Hadoop Datanodes 找不到 NameNode【英文标题】:Hadoop Datanodes cannot find NameNode 【发布时间】:2012-02-10 23:15:24 【问题描述】:

我在 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(和 ***)上找到了此错误消息的其他实例,但没有一个解决方案有效(尝试将 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.,但它并没有改变行为。

是的,master 上的netstat 清楚地显示 tcp 端口 54310 和 54311 正在侦听。

有人有什么建议可以让从属Datanodes识别Namenode吗?

编辑 #1:在使用 nmap 进行一些探索时(请参阅这篇文章中的 cmets),我认为问题出在我的 /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

对于每个从属虚拟机:

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

【问题讨论】:

您正在运行防火墙吗?还有,Master的IP还是192.168.1.10吗?愚蠢的问题,但有时人们会错过明显的东西。 使用sudo apt-get install gufw 命令安装gufw 并检查防火墙设置。还要检查VirtualBox 中的network connection type。 Anyone have any suggestions to get the slave Datanodes to recognize the Namenode? - 这更像是 Ubuntu 查询而不是 Hadoop 查询?应该是how to get the slave VMs talk to the master VM @ChrisShain:这是默认的 Ubuntu 11.10 设置:没有活动防火墙,IP 仍然相同(我的路由器设置为根据 MA​​C 地址提供静态 IP;我的 VirtualBox 设置为提供桥接网络,因此每个 VM 的 MAC 地址也应保持相同)。提出这些问题总是很高兴:) @PraveenSripati:网络连接类型为桥接;自初始设置以来,它在 11.04 下运行良好时并没有改变。它可能更像是一个 Ubuntu 查询而不是一个 Hadoop 查询,但是因为我不知道问题出在哪里,它可能是一个错误配置的 Hadoop 设置(尽管此时我认为不是)或者Ubuntu 网络配置错误(很可能)。 【参考方案1】:

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

【讨论】:

谢谢伙计,我一直在尝试这个和那个几个小时......有同样的问题。干杯 你的意思是说,用 localhost localhost.localdomain 评论 127.0.0.1 ip...? 不,127.0.1.1 条目。 我仍然面临同样的问题?你能帮忙吗?我的namenode在192.168.1.200:9000上运行,我没有127.0.1.1的条目,我有127.0.0.1,本地主机 另外,请务必阅读此问题的其余答案,它们提供了有关解决问题的其他有用信息。【参考方案2】:

这个解决方案对我有用。即确保您在 core-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.x.y 或 127.0.x.y

【讨论】:

【参考方案3】:

我也遇到了同样的问题。 @Magsol 解决方案有效,但应注意需要注释掉的条目是

127.0.1.1 masterxyz

在主机上,而不是从机上的 127.0.1.1,尽管我也这样做了。此外,您还需要 stop-all.sh 和 start-all.sh 用于 hadoop,这可能很明显。

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

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

【讨论】:

感谢 pferrel 明确表示它只是在 localhost 上循环的 namenode,我们只需修改 /etc/hosts(删除 127.0.1.1)并重新启动所有 hadoop 进程。跨度> 【参考方案4】:

虽然此响应不是作者正在寻找的解决方案,但其他用户可能会以其他方式登陆此页面,因此如果您使用 AWS 设置集群,则很可能尚未启用 ICMP 安全规则在 AWS 安全组页面中。看下面:Pinging EC2 instances

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

【讨论】:

【参考方案5】:

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

192.168.0.24 主 192.168.0.26 worker2

在我的 worker2 机器日志中,我遇到了重试连接到服务器的相同问题:master/192.168.0.24:54310。但是上面提到的人在运行这个命令时遇到了错误——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/hosts 127.0.0.1 本地主机 192.168.0.26 Ubuntu 192.168.0.24 主 192.168.0.26 worker2

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

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

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

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

【讨论】:

【参考方案6】:

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

127.0.0.1  localhost
192.168.201.101 master
192.168.201.102 slave1
192.168.201.103 slave2

其次,&gt; 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

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

【讨论】:

以上是关于Hadoop Datanodes 找不到 NameNode的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Hadoop 中的 Datanodes/Slavodes 之间分配数据?

Datanodes 处于活动状态,但我无法将文件复制到 HDFS [Hadoop 2.6.0 - Raspberry Pi Cluster]

错误: 找不到或无法加载主类(invalid variable name) org.apache.hadoop.hbase.util.GetJavaProperty——Hbase报错

hadoop 格式化目录 不正确

格式化hdfs上的namenode后如何格式化datanodes?

HDFS中的内存存储支持