在部署单节点分布式的时候,访问9000端口成功出现页面,可是当我再学习hdfs的时候,需要对core-site.xml在的配置进行修改,但是修改后出现了一些问题,如运行jps出现的节点中namenode就不见了,网页也自然访问不了。那么究竟是什么原因产生的呢?
既然是与namenode相关的问题,那么就要找到与namenode相关的日志去找到问题的原因啦。
那我们便切换到日志的目录下
cd /HADOOP_HOME/logs
然后找到hadoop-root-namenode-实例ID.log,
但是由于log文件相当大,我们就只查看该文件的最后五十行吧
执行 tail -n 50 hadoop-root-namenode-实例ID.log
就会看到报错信息,我的报错信息如下:
Caused by: java.net.BindException: Cannot assign requested address
这个错误的原因是无法分配请求的地址,后面还给出了一个参考的网址,网址中给出了造成这个问题的可能原因:
- 该端口正在使用中(最有可能)
- 如果端口号低于1024,操作系统可能会阻止您的程序绑定到“可信端口”
- 如果配置是hostname:port值,则可能是主机名错误 - 或者其IP地址不是您的计算机所具有的IP地址。
- 有一个服务实例已在运行。
- 如果您在EC2上运行,则您的服务正在尝试使用公共主机名或IP显式绑定公共弹性IP地址,或者隐式使用“0.0.0.0”作为地址。
如果端口为“0”,则操作系统正在寻找任何空闲端口 - 因此端口使用和端口低于1024的问题极不可能是导致问题的原因。主机名混淆和网络设置是可能的原因。
由于您无法在TCP端口上侦听多个进程,因此正在侦听的任何内容都会停止正在进行的服务。您需要跟踪并停止该过程,或者更改您尝试启动的服务以收听其他端口。
如何追查问题
- 确定程序尝试使用的主机/ IP地址。
- 确保主机名有效:尝试ping它; 使用ifconfig列出网络接口及其IP地址。
- 确保主机名/ IP地址是属于相关主机的主机名/ IP地址。
- 尝试并确定它的使用原因。telnet <hostname> <port>并指向Web浏览器都是很好的技巧。
- 确定程序尝试绑定到哪个端口
- 确定正在使用的端口和正在使用的程序
- 以root身份使用netstat -a -t --numeric-ports -p列出按编号和进程使用的端口。(在OS / X上,您需要使用lsof)。
- 更改其中一个程序的配置以在另一个端口上侦听。
最后,这不是Hadoop问题,它是主机,网络或Hadoop配置问题。
根据上列的原因一步一步进行排查,最后发现问题出现在core-site.xml中,
<property>
<name>fs.defaultFS</name>
<value>hdfs://私网ip:9000</value>
</property>
之前我在fs.defaultFS中配置的都是公网ip,问题解决,心情美丽,自己动手解决问题是真的开心呀