1. 程式人生 > >hadoop之 安全模式及SafeModeException

hadoop之 安全模式及SafeModeException

urn 修改 auto 運行 節點 hold -i rep pac

問題: hadoop啟動的時候報錯

HTTP ERROR 500
Problem accessing /nn_browsedfscontent.jsp. Reason:

Cannot issue delegation token. Name node is in safe mode.
The reported blocks 0 needs additional 10 blocks to reach the threshold 0.9990 of total blocks 10.
Safe mode will be turned off automatically

Caused by:
org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot issue delegation token. Name node is in safe mode.

理論:
Hadoop的安全模式
在分布式文件系統啟動的時候,開始的時候會有安全模式,當分布式文件系統處於安全模式的情況下,文件系統中的內容不允許修改也不允許刪除,直到安全模式結束。安全模式主要是為了系統啟動的時候檢查各個DataNode上數據塊的有效性,同時根據策略必要的復制或者刪除部分數據塊。運行期通過命令也可以進入安全模式。在實踐過程中,系統啟動的時候去修改和刪除文件也會有安全模式不允許修改的出錯提示,只需要等待一會兒即可。

在hadoop集群的時候,集群的運行會進入到安全模式(safeMode)下。在安全模式下運行一段時間後,自動退出。
1.那麽,系統在安全模式下幹什麽了?
當集群啟動的時候,會首先進入到安全模式。系統在安全模式下,會檢查數據塊的完整性。假設我們設置的副本數(即參數dfs.replication)是5,那麽在dataNode上就應該有5個副本存在,假設只存在3個副本,那麽比率就是3/5=0.6。
在配置文件hdfs-default.xml中定義了一個最小的副本率,見圖7-1
我們的副本率0.6明顯小於0.999,因此系統會自動的復制副本到其他dataNode,爭取是的最小副本率>=0.999。如果系統中有8個副本,超過我們設定的5個副本,那麽系統也會刪除多於的3個副本。

2.安全模式對我們有什麽影響?
這時,不允許客戶端進行任何修改文件的操作,包括上傳文件、刪除文件、重命名、創建文件夾等操作。比如,創建文件時,在源代碼中就有對安全模式的判斷,如圖7-2
當我們在安全模式下進行修改文件操作時,會報出如下錯誤.
正常情況下,安全模式會運行一段時間自動退出的。只需要我們稍等一會就可以了。到底等多長時間哪,我們可以通過50070端口查看安全模式退出的剩余時間,如圖7-4。
雖然不能進行修改文件的操作,但是可以瀏覽目錄結構、查看文件內容的。

3.我們可以控制是否進入或者退出安全模式嗎?
在命令行下是可以控制安全模式的進入、退出和查看的,
命令hadoop fs –safemode get 查看安全模式狀態
命令hadoop fs –safemode enter 進入安全模式狀態
命令hadoop fs –safemode leave 離開安全模式狀態
安全模式,是hadoop集群的一種保護機制,在啟動時,最好是等待集群自動退出,然後再進行文件操作。


解決:

方法一:

safemode模式
NameNode在啟動的時候首先進入安全模式,如果datanode丟失的block達到一定的比例(1-dfs.safemode.threshold.pct),則系統會一直處於安全模式狀態即只讀狀態。

hadoop dfsadmin -safemode leave

有兩個方法離開這種安全模式
1. 修改dfs.safemode.threshold.pct為一個比較小的值,缺省是0.999。
2. hadoop dfsadmin -safemode leave命令強制離開

方法二:

jps查看各個節點啟動的進程
hadoop-daemon.sh start XX資源名 XX節點名

查看日誌(若資源端口被占用,如50010端口被占用)
可以將占用此端口的程序殺掉或是更改hdfs-site.xml中的<name>dfs.datanode.address</name><value>0.0.0.0:50010</value>
殺掉進程釋放端口方法:
1、netstat -tln | grep 50010,查看這個端口使用情況;
2、lsof -i:50010,顯示是哪個程序占用此端口
3、kill -9 進程的PID,殺掉這個進程,重啟節點服務即可。


補充:
dfsadmin -safemode value 來操作安全模式,參數value的說明如下:
enter - 進入安全模式
leave - 強制NameNode離開安全模式
get - 返回安全模式是否開啟的信息
wait - 等待,一直到安全模式結束。

hadoop之 安全模式及SafeModeException