HDFS - 安全模式是什麼

HDFS - NameNode的高可用提到了NameNode有active狀態和standby狀態,他還有另一個狀態,就是safemode,安全模式。在安全模式下,HDFS不接收對元素修改的請求,只容許對元數據的讀請求。如下是幾種進入安全模式的方式:java

可用空間

當NameNode啓動的時候,會獲取文件所在的磁盤分區裏真正可使用的存儲空間,而後跟duReserved進行對比,若是存儲空間大於duReserved,則返回true,若是小於,則返回false,返回值賦值給返回值給hasResourcesAvailable。duReserved默認爲100M,能夠經過dfs.namenode.resource.du.reserved進行配置。
hasResourcesAvailable爲false的時候,說明可用存儲空間不足100M,此時進入安全模式。
image.pngnode

block個數

NameNode啓動的時候,會從磁盤fsimage加載元數據,加載後他就知道了總共有多少個block,可是他不知道這些block在DataNode中是否正常,因此進入安全模式,等待DataNode上報本身的block信息,當上報的block個數達到必定閾值的時候,就會退出安全模式,下面是具體的計算過程。
在HDFS中,block的狀態包括正在構建的和complete兩種狀態,因此咱們要獲取到complete的block個數,就須要先獲取全部的block,而後減去正在構建的block,這樣就能夠獲取到complete的block個數。
threshold參數,好比爲0.9,說明block數量爲100的狀況下,只要存在90個正常的block就能夠了,由於HDFS集羣的文件數量是至關多的,他的默認值是0.999,表明1000個block至少要999個是正常的,能夠經過dfs.namenode.safemode.threshold-pct進行配置。
complete的block個數乘以threshold,這個值就是要保證HDFS正常寫請求的最低數據量,若是datanode彙報過來的block個數blockSafe比最低數據量還小,那就要進入安全模式。
image.pngsegmentfault

datanode的存活個數

datanode的存活個數datanodeThreshold默認爲0,表明的不啓用,若是有設置,那就要與DataNode的個數進行判斷,若是存活的DataNode個數小於設置的值,那須要進入安全模式。
image.png安全

命令

除了上面三種自動進入安全模式外,咱們還能夠經過命令讓HDFS進入安全模式:spa

命令 描述
hdfs dfsadmin -safemode get 查看安全模式的狀態
hdfs dfsadmin -safemode enter 進入安全模式
hdfs dfsadmin -safemode wait 進入安全模式
hdfs dfsadmin -safemode leave 離開安全模式

enterwait都是進入安全模式,區別是enter是必定進入安全模式的,wait是等待HDFS進入安全模式,就好像在java中執行gc命令,並不會直接執行gc命令同樣。code

相關文章
相關標籤/搜索