关于 Hadoop集群的java.net.NoRouteToHostException: 没有到主机的路由异常的问题

关于 Hadoop集群的java.net.NoRouteToHostException: 没有到主机的路由异常的问题

前段天对电脑加装了固态,重装了系统以前虚拟机的Hadoop集群也因此没了,所以重新做了个集群,由于临近期末忙于复习就没有测试集群是否能用,就在昨天跑了一下以前的程序结果出现了下面的异常,忙了一晚上才发现就只是Linux防火墙没关造成的,总结一下这个问题的解决方式。

在这里插入图片描述
首先呢,要明确这个问题产生的原因:
java.net.NoRouteToHostException意思是当前主机与其他节点无法建立RPC通信,RPC通信基于Socket封装,socket实质就是 IP地址 + 目的端口。

明确这两点我们就可以分步检查了

第一步:
先对IP地址进行检查,检查网络是否畅通(各节点在同一个VLAN下是不用检查的),检查hosts文件对应关系是否正确。
首先ping 百度,或者使用ip ping其它节点 ,若能ping通则证明网络是没问题的,如若不能则需要检查网络(如当前ip是否有效,网关是否设置正确等)问题。
以ping 百度为例:
[peng@node02 ~]$ ping www.baidu.com
PING www.a.shifen.com (111.13.100.92) 56(84) bytes of data.
64 bytes from 111.13.100.92 (111.13.100.92): icmp_seq=1 ttl=128 time=23.0 ms
64 bytes from 111.13.100.92 (111.13.100.92): icmp_seq=2 ttl=128 time=20.7 ms
64 bytes from 111.13.100.92 (111.13.100.92): icmp_seq=3 ttl=128 time=21.4 ms
64 bytes from 111.13.100.92 (111.13.100.92): icmp_seq=4 ttl=128 time=20.3 ms

^Z
1+ 已停止 ping www.baidu.com

检查到没有网络问题后,我们检查主机表(hosts文件)对应,检查不用去挨个查看,直接在各节点上使用主机名互ping

[peng@node03 ~]$ ping node01
PING node01 (192.168.38.3) 56(84) bytes of data.
64 bytes from node01 (192.168.38.3): icmp_seq=1 ttl=64 time=0.642 ms
64 bytes from node01 (192.168.38.3): icmp_seq=2 ttl=64 time=0.661 ms
64 bytes from node01 (192.168.38.3): icmp_seq=3 ttl=64 time=0.602 ms
64 bytes from node01 (192.168.38.3): icmp_seq=4 ttl=64 time=0.660 ms
^Z
1+ 已停止 ping node01
[peng@node03 ~]$ ping node02
PING node02 (192.168.38.4) 56(84) bytes of data.
64 bytes from node02 (192.168.38.4): icmp_seq=1 ttl=64 time=1.01 ms
64 bytes from node02 (192.168.38.4): icmp_seq=2 ttl=64 time=0.579 ms
64 bytes from node02 (192.168.38.4): icmp_seq=3 ttl=64 time=0.551 ms
^Z
2+ 已停止 ping node02

都能ping通在证明主机对应无误。

若存在
[peng@node03 ~]$ ping node01
ping: node01: 未知的名称或服务

是因为该节点主机对应有误。

进入/etc/hosts文件修改即可
[peng@node03 ~]$ sudo vim /etc/hosts
[sudo] peng 的密码:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.38.3 node01
192.168.38.4 node02
192.168.38.5 node03

注意:node01,node02,node03后面不能有除换行符外的空白符,如空格和制表符,系统会把他们当做主机名的一部分。

第二步:
查看防火墙是否关闭,端口问题是由防火墙拒绝服务造成的。

centOS 6使用的是iptables,centOS 7使用的是firewalld两者关闭的命令不同

centOS 6 :

[peng@node01 ~]$ sudo service iptables stop //关闭防火墙
[sudo] password for peng:
[peng@node01 ~]$ sudo service iptables status //查看当前防火墙的状态
iptables: Firewall is not running.
[peng@node01 ~]$ sudo chkconfig iptables off //关闭防火墙开机自启动

centOS 7:

[peng@node01 sbin]$ sudo systemctl stop firewalld //关闭防火墙
[sudo] peng 的密码:
[peng@node01 sbin]$ sudo systemctl status firewalld //查看当前防火墙的状态
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead) since 二 2019-01-08 16:17:57 CST; 24s ago
Docs: man:firewalld(1)
Process: 8739 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 8739 (code=exited, status=0/SUCCESS)

1月 08 15:15:26 node01 systemd1: Starting firewalld - dynamic firewall daemon…
1月 08 15:15:28 node01 systemd1: Started firewalld - dynamic firewall daemon.
1月 08 16:17:56 node01 systemd1: Stopping firewalld - dynamic firewall daemon…
1月 08 16:17:57 node01 systemd1: Stopped firewalld - dynamic firewall daemon.
[peng@node01 sbin]$ sudo systemctl disable firewalld // 关闭防火墙开机自启动
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

如果centOS 7 使用yum安装了iptables要使用对应的关闭方式。

至此,Hadoop集群的java.net.NoRouteToHostException问题便解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值