Hadoop 启动namenode节点失败

问题产生

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


[root@localhost 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命令可以看到:

[shirdrn@localhost bin]# hostname  
localhost.localdomain  

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

[root@localhost 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地址,然后重新启动网络服务:

[root@localhost 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地址即可

重新格式化HDFS

重新格式化hdfs系统的方法:

1、打开hdfs-site.xml

我们打开Hadoop的hdfs-site.xml,基本配置如下所示:

<property>

<name>dfs.name.dir</name>

<value>/usr/local/hadoop/hdfs/name</value>

</property>

<property>

<name>dfs.data.dir</name>

<value>/usr/local/hadoop/hdsf/data</value>

</property>

 将 dfs.name.dir所指定的目录删除、dfs.data.dir所指定的目录删除

 2、删除core-site.xml配置文件指定的相关目录

<property>

<name>hadoop.tmp.dir</name>

<value>/usr/local/hadoop/hadooptmp</value>

</property>

 将hadoop.tmp.dir所指定的目录删除,即删除Hadoop的临时文件路径。

3、重新执行命令:hadoop namenode -format

格式化完毕。
这种格式化HDFS的方式是需要把原来HDFS中的数据全部清空,然后再格式化并安装一个全新的HDFS。
注:这种格式化方式需要将HDFS中的数据全部清空,以后我们探讨不需删除数据即可重新格式化的方法。

注解:如果删除文件,提示permission denied

使用 rm -rf 删除输出如下:

 

加 sudo 执行后发现关键信息了:xxx is not in the sudoers file.

解决方法:

首先需要切换到root身份

$su - (非root用户名)

(注意有 -,这和su是不同的,在用命令"su"的时候只是切换到root,但没有把root的环境变量传过去,还是当前用户的环境变量,用"su -"命令将环境变量也一起带过去,就象和root登录一样)

然后

$visudo     //切记,此处没有vi和sudo之间没有空格

1、“:$”移动光标,到最后一行

2、按a,进入append模式

3、输入您的用户名及后面的信息

your_user_name ALL=(ALL)  ALL

4、按Esc

5、输入“:wq”(回车,保存文件并退出)

这样就把自己加入了sudo组,可以使用sudo命令了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章