Hadoop 启动namenode节点失败

问题产生

       运行下面的命令启动namenode,jps命令查看namenode发现没有启动。查看生成的日志文件发现有如下的警告信息


[[email protected] hadoop-2.8.5]# sbin/hadoop-daemon.sh start namenode
starting secondarynamenode, logging to /opt/modules/hadoop-2.8.5/logs/hadoop-root-secondarynamenode-localhost.localdomain.out


WARN:Illegal reflective access by org.apache.hadoop.security.authentication.util.KerberosUtil (file:/opt/modules/hadoop-2.8.5/share/hadoop/common/lib/hadoop-auth-2.8.5.jar) to method sun.security.krb5.Config.getInstance()

问题解决

我们通过执行hostname命令可以看到:

[[email protected] bin]# hostname  
localhost.localdomain  

也就是说,Hadoop在格式化HDFS的时候,通过hostname命令获取到的主机名是localhost.localdomain,然后在/etc/hosts文件中进行映射的时候,没有找到,看下我的/etc/hosts内容

[[email protected] bin]# cat /etc/hosts  
# Do not remove the following line, or various programs  
# that require network functionality will fail.  
127.0.0.1               localhost       localhost  
192.168.1.103           localhost       localhost  

也就说,通过localhost.localdomain根本无法映射到一个IP地址,所以报错了。

此时,我们查看一下/etc/sysconfig/network文件:

NETWORKING=yes  
NETWORKING_IPV6=yes  
HOSTNAME=localhost.localdomain  

可见,执行hostname获取到这里配置的HOSTNAME的值。

解决方法

第一种:修改主机名

      修改/etc/sysconfig/network中HOSTNAME的值为localhost,或者自己指定的主机名,保证localhost在/etc/hosts文件中映射为正确的IP地址,然后重新启动网络服务:

[[email protected] bin]# /etc/rc.d/init.d/network restart  
Shutting down interface eth0:  [  OK  ]  
Shutting down loopback interface:  [  OK  ]  
Bringing up loopback interface:  [  OK  ]  
Bringing up interface eth0:    
Determining IP information for eth0... done.  
[  OK  ]  

这时,再执行格式化HDFS命令,以及启动HDFS集群就正常了。

第二种:修改core-site.xml文件defaultFS为已有的主机名或者直接就为本机的IP地址即可

Hadoop 启动namenode节点失败