做一个简单的java读取hdfs的demo。
环境:
客户端:win7 +eclipse。
服务器端,虚拟机:centos 64 + hadoop2.5.2
服务器core-site.xml关键配置如下
<property>
<name>fs.default.name</name>
<value><span style="color:#ff0000;">hdfs://localhost:9000</span></value>
</property>
本地eclipse项目中引用core-site.xml关键配置如下
<property>
<name>fs.default.name</name>
<value><span style="color:#ff0000;">hdfs://192.168.56.129:9000</span></value>
</property>
项目运行报错: Call From hostname/169.168.1.12 to cm:9000 failed on connection exception
网上解决方法:
1.检查防火墙是否关闭
2.telnet是否能链接
3.hdfs配置中权限设置是否关闭
4.重新格式化namenode
.........
试了各种方法都无济于事,依然报错。
后来将java项目移至服务器上调试,发现将eclipse的core-site.xml的fs.defaullt.name配置改成localhost就可以,改成192.168.56.129就不行。
根据这个发现,将hdfs的core-site.xml的 fs.default.name配置成IP或hostname
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.56.129:9000</value>
</property>
windows eclipse的core-site.xml配置文件也改成IP或者hostname(必须先在windows的hosts文件中配置)
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.56.129:9000</value>
</property>
这样配置后,重启hdfs,eclipse 再次访问hdfs问题就解决了。