在部署单节点分布式的时候,访问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 

就会看到报错信息,我的报错信息如下:

jps 查询不到nssm启动的java进程 jps看不到namenode_IP

Caused by: java.net.BindException: Cannot assign requested address

这个错误的原因是无法分配请求的地址,后面还给出了一个参考的网址,网址中给出了造成这个问题的可能原因:

  • 该端口正在使用中(最有可能)
  • 如果端口号低于1024,操作系统可能会阻止您的程序绑定到“可信端口”
  • 如果配置是hostname:port值,则可能是主机名错误 - 或者其IP地址不是您的计算机所具有的IP地址。
  • 有一个服务实例已在运行。
  • 如果您在EC2上运行,则您的服务正在尝试使用公共主机名或IP显式绑定公共弹性IP地址,或者隐式使用“0.0.0.0”作为地址。

如果端口为“0”,则操作系统正在寻找任何空闲端口 - 因此端口使用和端口低于1024的问题极不可能是导致问题的原因。主机名混淆和网络设置是可能的原因。

由于您无法在TCP端口上侦听多个进程,因此正在侦听的任何内容都会停止正在进行的服务。您需要跟踪并停止该过程,或者更改您尝试启动的服务以收听其他端口。

如何追查问题

  1. 确定程序尝试使用的主机/ IP地址。
  2. 确保主机名有效:尝试ping它; 使用ifconfig列出网络接口及其IP地址。
  3. 确保主机名/ IP地址是属于相关主机的主机名/ IP地址。
  4. 尝试并确定它的使用原因。telnet <hostname> <port>并指向Web浏览器都是很好的技巧。
  5. 确定程序尝试绑定到哪个端口
  6. 确定正在使用的端口和正在使用的程序
  7. 以root身份使用netstat -a -t --numeric-ports -p列出按编号和进程使用的端口。(在OS / X上,您需要使用lsof)。
  8. 更改其中一个程序的配置以在另一个端口上侦听。

最后,这不是Hadoop问题,它是主机,网络或Hadoop配置问题。

根据上列的原因一步一步进行排查,最后发现问题出现在core-site.xml中,

<property>
	<name>fs.defaultFS</name>
  	<value>hdfs://私网ip:9000</value>
</property>

之前我在fs.defaultFS中配置的都是公网ip,问题解决,心情美丽,自己动手解决问题是真的开心呀