问题产生
运行下面的命令启动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命令了。