【问题标题】:NoRouteToHostException while hadoop fs -copyFromLocal当 hadoop fs -copyFromLocal 出现 NoRouteToHostException
【发布时间】:2015-02-27 08:17:08
【问题描述】:

我在 CentOS7.0 上安装了 hadoop 2.5.1

我正在使用 3 台具有以下 hosts 文件的计算机,与所有 3 台计算机相同

我没有使用 DNS。

XXX.XXX.XXX.65 mccb-com65 #server

XXX.XXX.XXX.66 mccb-com66 #client01

XXX.XXX.XXX.67 mccb-com67 #client02

127.0.0.1 本地主机

127.0.1.1 mccb-com65

我执行命令

$hadoop fs -copyFromLocal /home/hadoop/hdfs/hdfs/s_corpus.txt hdfs://XXX.XXX.XXX.65:9000/tmp/

我遇到了下面的错误信息

INFO hdfs.DFSClient:createBlockOutputStream 中的异常 java.net.NoRouteToHostException:没有路由到主机 sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 在 sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739) 在 org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206) 在 org.apache.hadoop.net.NetUtils.connect(NetUtils.java:529) 在 org.apache.hadoop.hdfs.DFSOutputStream.createSocketForPipeline(DFSOutputStream.java:1526) 在 org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.createBlockOutputStream(DFSOutputStream.java:1328) 在 org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1281) 在 org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:526) 15/02/27 16:57:40 INFO hdfs.DFSClient: 放弃 BP-1257634566-XXX.XXX.XXX.65-1425014347197:blk_1073741837_1013 15/02/27 16:57:40 INFO hdfs.DFSClient: 不包括数据节点 XXX.XXX.XXX.67:50010

我关闭了两台计算机 mccb-com66 和 mccb-com67 的所有防火墙,如下所示。

$systemctl status iptables

iptables.service - 带有 iptables 的 IPv4 防火墙已加载:已加载 (/usr/lib/systemd/system/iptables.service;已禁用)
积极的: 不活动(死)

此外,我还关闭了 selinux。

datanode 和 nodemanager 在两台机器中都处于活动状态 我可以检查状态 JP和 http://mccb-com65:50070http://mccb-com65:8088

我错过了什么?

有人能帮帮我吗???

【问题讨论】:

  • ipv6是否被禁用?
  • 我禁用了,我可以使用命令 $cat /proc/sys/net/ipv6/conf/all/disable_ipv6 验证结果 - $ 1

标签: java apache hadoop


【解决方案1】:

即使我关闭了 iptables,它也不是有效的解决方案。

我用firewall-cmd逐个打开端口后,就可以了..

对于所有从站(66 和 67)

$firewall-cmd --zone=public --add-port=8042/tcp
$firewall-cmd --zone=public --add-port=50010/tcp
$firewall-cmd --zone=public --add-port=50020/tcp
$firewall-cmd --zone=public --add-port=50075/tcp
$firewall-cmd --reload

然后它就起作用了。

但是,由于我无法打开所有需要运行 Hadoop 应用程序的端口,

关闭firewalld是合理的比如

$systemctl stop firewalld
$systemctl disable firewalld

并检查状态

$Systemctl status firewalld

【讨论】:

    【解决方案2】:

    您的 /etc/hosts 应包含:

    XXX.XXX.XXX.65 mccb-com65 #server
    
    XXX.XXX.XXX.66 mccb-com66 #client01
    
    XXX.XXX.XXX.67 mccb-com67 #client02
    

    删除

    127.0.0.1 localhost
    
    127.0.1.1 mccb-com65
    

    【讨论】:

    • 感谢您的关注,我已经更改了您建议的主机文件,但这不是解决方案。
    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2016-05-26
    相关资源
    最近更新 更多