問題描述
上傳或者操作hdfs的檔案時候遇到
node is in safe mode
.(處于安全模式),處于這個模式雖然不能進行修改檔案的操作,但是可以
浏覽
目錄結構、
檢視
檔案内容的。
解決方案
那就是退出安全模式
離開安全模式,指令
hadoop dfsadmin -safemode leave
擴充指令
檢視安全模式狀态,指令
hadoop dfsadmin -safemode get
進入安全模式狀态,指令
hadoop dfsadmin -safemode enter
(叢集更新維護時使用)
那麼hdfs什麼時候會進入安全模式?
①啟動或者重新啟動hdfs時;②HDFS維護更新時
安全模式是hadoop的一種
保護機制
,用于
保證叢集中的資料塊
的安全性。
當叢集
啟動
的時候,會
首先
進入安全模式。當系統處于安全模式時會檢查資料塊的完整性。假設我們設定的副本數(即參數
dfs.replication
)是5,那麼在datanode上就應該有5個副本存在,假設隻存在3個副本,那麼比例就是3/5=0.6。在配置檔案
hdfs-default.xml
中定義了一個
最小的副本的副本率
0.999,如圖
我們的副本率0.6明顯小于0.99,是以系統會自動的複制副本到其他的dataNode,使得副本率不小于0.999.如果系統中有8個副本,超過我們設定的5個副本,那麼系統也會删除多餘的3個副本。
安全模式對我們有什麼影響呢?
這時,不允許用戶端進行任何修改檔案的操作,包括上傳檔案,删除檔案,重命名,建立檔案夾等操作。比如
建立檔案
時,在源代碼中就有對安全模式的判斷,如圖所示
當我們在安全模式下進行
修改檔案
操作時,會報如下錯誤,如圖
正常情況下,安全模式會運作一段時間自動退出的,隻需要我們稍等一會就行了,到底等多長時間呢,我們可以通過50070端口檢視安全模式退出的剩餘時間,如圖
安全模式是hadoop的一種保護機制,在啟動時,最好是等待叢集自動退出,然後進行檔案操作。
檢查hdfs是否健康
可以使用
fsck
檢查一下HDFS的健康度
fsck相關介紹:
hadoop fsck
Usage:DFSck
[-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]
<path>
檢查這個目錄中的檔案是否完整
-move
破損的檔案移至/lost+found目錄
-delete
删除破損的檔案
-openforwrite
列印正在打開寫操作的檔案
-files
列印正在check的檔案名
-blocks
列印block報告(需要和-files參數一起使用)
-locations
列印每個block的位置資訊(需要和-files參數一起使用)
-racks
列印位置資訊的網絡拓撲圖(需要和-files參數一起使用)
hadoop fsck /
用這個指令可以檢查整個檔案系統的健康狀況,但是要注意
它不會主動恢複
備份缺失的block,這個是由NameNode單獨的線程
異步處理
的.