問題產生
運行下面的命令啓動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命令了。