Call From s0/192.168.56.140 to s0:8020 failed on connection exception

本文记录了在Ubuntu环境下搭建Hadoop集群过程中遇到的问题及解决方法。主要问题包括Hadoop集群无法正常启动、Namenode进程缺失等,并详细介绍了如何通过修改配置文件、指定临时目录位置来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ubuntu@s0:~$ hadoop fs -ls /

ls: Call From s0/192.168.56.140 to s0:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

开始以为s0的端口没有打开,查了一发现防火墙跟本就没有启用。

后来把所有集群上core-site.xml 配置 hdfs://s0/改成了hdfs://s0:8020/。然后统一重启

再在s0上执行了hadoop namenode -format

再执行hadoop fs -ls /,发现还是报同样的错误。

再执行jsp命令,没有发现 Namenode这个进程。

再执行start-all.sh。Namenode运行了。

最后再执行hadoop fs -ls / 终于可以了。

 

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://s0:8020/</value>
	</property>
</configuration>

 另外要通过jps命令查看namenode是否已经启动,如果start-all.sh不能启动,那就单独执行hadoop namenode命令。

我执行的时候报错了:

org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-ubuntu/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.

 

Directory does not exist?但是为什么刚装完时是存在的呢,抱着试试看的态度,再次执行。

hadoop namenode -format

执行之后再启动,namenode启动成功了,说明上面does not exist的目录在format namenode的时候重新建起来了,但是如果每次重启都要format namenode,也太不靠谱了,不止是麻烦,更大的麻烦是里面的数据不能总被无情的delete掉啊,问题必须解决。

Directory /tmp/hadoop-javoft/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.这里的目录既然是在tmp下面的,回忆一下,tmp目录下的文件是临时文件会被定期删除的,貌似bug已经露出水面。那就重启计算机试试是不是因为这,重启之前检查一下tmp目录下面确定几个format namenode之后应该有的目录都有的,重启之后,发现全部被删掉。在执行一次 start-dfs.sh,看到tmp目录下面建了一些目录,但是dfs/name目录仍然不存在,在start-dfs.sh时候建了一部分目录和文件。而dfs/name需要在hadoop namenode -format时建立。问题清楚了。

解决方案就很简单,这些目录的位置都是根据hadoop.tmp.dir的位置确定的,所以只需要在conf/core-site.xml覆盖hadoop.tmp.dir的默认值即可:

...
<property>
   <name>hadoop.tmp.dir</name>
   <value>/home/ubuntu/Documents/hadoop/hadoop-${user.name}</value>
   <description>A base for other temporary directories.</description>
</property>
...

如此问题解决。。。

 

 

 

 

看起来你遇到了Hadoop分布式文件系统(HDFS)之间通信的问题,具体表现为`Call From`主机到另一个主机的连接失败。这通常与网络设置、防火墙配置以及Hadoop守护进程的安全性有关。以下是可能的原因和解决方案: 报错原因: 1. **防火墙阻止**:如果主节点(hadoop1)的9000端口受到防火墙限制,导致其他节点无法连接。 2. **端口未开放**:即使防火墙允许,也可能是因为主节点的9000端口并未开启,用于接收客户端请求。 3. **远程访问权限**:即使端口开放,若设置了只允许本地连接,那么外部节点会收到拒绝连接。 报错解决步骤(简易版本)[^2]: 1. **检查防火墙设置**:确认主节点的防火墙是否允许来自其他节点的TCP连接,特别是9000端口。 ```shell sudo ufw allow from <slave_ip> to any port 9000 ``` 2. **启动Hadoop服务**:确保Hadoop在主节点上运行并且NameNode(可能是`hdfs namenode -format`后的结果)正在监听9000端口。 3. **修改配置**:检查`core-site.xml`或`hdfs-site.xml`中的`<dfs.http.address>`配置,确保允许远程访问。默认应为`localhost`,需改为全网地址如`0.0.0.0`。 4. **重启Hadoop服务**:如果上述步骤调整了配置,需要重启Hadoop以应用新的设置。 ```shell sudo service hadoop-daemon restart namenode ``` 如果你遇到类似`mkdir: Call From hadoop102/192.168.45.102 to hadoop102:8020 failed on connection exception: java.net...`的错误,可能说明尝试连接的节点自身存在问题,或者是网络环境内部的连通性问题。检查hadoop102自身的网络设置和Hadoop服务状态也是必要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值