我这里是测试用的伪分布式环境。
1、起因
执行hadoop fs -ls hdfs://localhost:9000报错:
[root@nn opt]# hadoop fs -ls hdfs://localhost:9000
ls: Call From nn/172.16.115.128 to localhost:9000 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
2、排错
查看9000端口的监听地址:
[root@nn tmp]# netstat -anp | grep 9000
tcp 0 0 172.16.115.128:9000 0.0.0.0:* LISTEN 102048/java
tcp 0 0 172.16.115.128:9000 172.16.115.128:47490 ESTABLISHED 102048/java
tcp 0 0 172.16.115.128:47490 172.16.115.128:9000 ESTABLISHED 102312/java
tcp 0 0 172.16.115.128:9000 172.16.115.128:47514 ESTABLISHED 102048/java
tcp 0 0 172.16.115.128:47514 172.16.115.128:9000 ESTABLISHED 102635/java
发现端口监听IP为172.16.115.128,是服务器的IP,再查看下core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://172.16.115.128:9000</value>
</property>
</configuration>
配置文件里面HDFS主机IP是172.16.115.128而不是127.0.0.1,所以当我们访问127.0.0.1:9000的时候会被拒绝。
3、解决
将配置文件core-site.xml中的fs.defaultFS参数改成
hdfs://127.0.0.1:9000,重启hdfs即可。
注:修改成127.0.0.1以后,只允许本机访问,如果需要全网访问,需要改成hdfs://0.0.0.0:9000