本文介紹當NameNode啟動后,NameNode無法退出safemode狀態的原因及解決方案。
具體報錯
NameNode日志或者HDFS WebUI上出現以下報錯信息,將無法退出safemode,導致HDFS服務整體基本不可用。
Safemode is ON.The reported blocks xxx needs addition ablocks to reach the threshold 0.9990 of total blocks yyy
問題原因
該問題通常是由于DataNode上報的數據塊未達到總量的閾值比例(默認為0.999f),導致NameNode無法退出safemode。首先需要確認所有DataNode是否已正常啟動,如果DataNode進程沒有問題,問題可能出在以下兩個方面:
運維不當導致數據塊丟失,無法達到閾值比例。如果出現此類情況,NameNode將無法自動退出safemode。
DataNode塊上報時間過長,多發生于大量DataNode重啟或NameNode重啟(全部重啟,非正常HA切換)等大量HDFS服務進程發生異常重啟的情況。在此類情況下,DataNode需要觸發全量塊上報,NameNode接受到的數據塊達到閾值后才能自動退出safemode。整個恢復過程的時長取決于數據塊的數量。
解決方案
方案一:通過hdfs命令手動退出safemode。
hdfs dfsadmin -safemode leave
方案二:通過修改以下配置項適當調低閾值比例,并在EMR控制臺目標集群HDFS服務的狀態頁面,通過單擊NameNode組件操作列中的重啟,來使NameNode生效。
dfs.namenode.safemode.threshold-pct=0.9f (默認值為0.999f)
說明上述參數值
0.9f
只是舉例,實際使用中請您根據具體情況來調整dfs.namenode.safemode.threshold-pct參數的值。
文檔內容是否對您有幫助?