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命令了。

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