Hadoop 分散式檔案系統 (HDFS) 名稱節點維護所有資料節點的狀態。有兩種狀態類型。第一種類型描述資料節點的存活狀態,表示節點是存活、死亡或過時。第二種類型描述管理狀態,表示節點是正在服務中、已除役或正在維護中。
當管理員將資料節點停用時,資料節點將首先轉換為 DECOMMISSION_INPROGRESS
狀態。在所有屬於該資料節點的區塊都根據每個區塊的複製係數在其他地方完全複製後,資料節點將轉換為 DECOMMISSIONED
狀態。之後,管理員可以關閉節點以執行可能需要數天或數週的長期修復和維護。機器修復後,可以將機器重新委派回叢集。
有時管理員只需要將資料節點停用數分鐘/小時即可執行短期修復/維護。在這種情況下,停用所產生的 HDFS 區塊複製開銷可能不是必需的,並且需要一個輕量級的程序。這就是維護狀態的使用方式。當管理員將資料節點置於維護狀態時,資料節點將首先轉換為 ENTERING_MAINTENANCE
狀態。只要屬於該資料節點的所有區塊都在其他地方至少複製,資料節點將立即轉換為 IN_MAINTENANCE
狀態。維護完成後,管理員可以將資料節點移出維護狀態。此外,維護狀態支援逾時,允許管理員設定資料節點允許停留於維護狀態中的最長持續時間。逾時後,資料節點將在沒有人為干預的情況下自動由 HDFS 轉移出維護狀態。
總之,資料節點管理員操作包括以下內容
資料節點管理員狀態包括以下內容
NORMAL
節點正在服務中。DECOMMISSIONED
節點已停用。DECOMMISSION_INPROGRESS
節點正在轉換為 DECOMMISSIONED 狀態。IN_MAINTENANCE
節點處於維護狀態。ENTERING_MAINTENANCE
節點正在轉換為維護狀態。要執行任何資料節點管理員操作,有兩個步驟。
更新主機層級設定檔以指出目標資料節點的所需管理員狀態。設定檔有兩種支援的格式。
執行下列指令,讓名稱節點重新載入主機層級組態檔。hdfs dfsadmin [-refreshNodes]
這是名稱節點使用的預設組態。它僅支援節點解除服務和重新委任;它不支援與維護狀態相關的管理員操作。請依據 hdfs-default.xml 中的說明,使用 dfs.hosts
和 dfs.hosts.exclude
。
在以下範例中,host1
和 host2
需要在服務中。host3
和 host4
需要在解除服務狀態中。
dfs.hosts 檔案
host1 host2 host3 host4
dfs.hosts.exclude 檔案
host3 host4
基於 JSON 的格式是新的組態格式,它支援資料節點上的通用屬性。請依據 hdfs-default.xml 中的說明,設定下列組態,以啟用基於 JSON 的格式。
設定 | 值 |
---|---|
dfs.namenode.hosts.provider.classname |
org.apache.hadoop.hdfs.server.blockmanagement.CombinedHostFileManager |
dfs.hosts |
json 主機檔案的路徑 |
以下是 HDFS 目前支援的屬性清單。
屬性 | 說明 |
---|---|
hostName |
必要。資料節點的主機名稱。 |
upgradeDomain |
選用。資料節點的升級網域 ID。 |
adminState |
選用。預期的管理員狀態。預設值為 NORMAL ;解除服務為 DECOMMISSIONED ;維護狀態為 IN_MAINTENANCE 。 |
port |
選用。資料節點的埠號 |
maintenanceExpireTimeInMS |
選用。資料節點將維持在維護狀態的毫秒數紀元時間。預設值為永久。 |
在以下範例中,host1
和 host2
需要在服務中。host3
需要在解除服務狀態中。host4
需要在維護狀態中。
dfs.hosts 檔案
[ { "hostName": "host1" }, { "hostName": "host2", "upgradeDomain": "ud0" }, { "hostName": "host3", "adminState": "DECOMMISSIONED" }, { "hostName": "host4", "upgradeDomain": "ud2", "adminState": "IN_MAINTENANCE" } ]
有許多與資料節點管理相關的叢集層級設定。對於常見的使用案例,您應該依賴預設值。請參閱 hdfs-default.xml 以取得說明和預設值。
dfs.namenode.maintenance.replication.min dfs.namenode.decommission.interval dfs.namenode.decommission.blocks.per.interval dfs.namenode.decommission.max.concurrent.tracked.nodes
當具有大量區塊的資料節點解除服務時,原始的解除服務演算法有問題,例如
HDFS-14854 引入了新的停用監視器,以減輕這些問題。此功能目前標記為實驗性質,且預設停用。您可以在 hdfs-site.xml 中將 dfs.namenode.decommission.monitor.class
的值設定為 org.apache.hadoop.hdfs.server.blockmanagement.DatanodeAdminBackoffMonitor
來啟用此功能。
相關組態屬性列於下表中。有關說明和預設值,請參閱 hdfs-default.xml。
屬性 |
---|
dfs.namenode.decommission.monitor.class |
dfs.namenode.decommission.backoff.monitor.pending.limit |
dfs.namenode.decommission.backoff.monitor.pending.blocks.per.lock |
管理員狀態是 NameNode 的 webUI 和 JMX 的一部分。正如 HDFSCommands.html 中所說明的,您也可以使用下列指令驗證管理員狀態。
使用 dfsadmin
檢查叢集層級的管理員狀態。
hdfs dfsadmin -report
使用 fsck
檢查儲存在特定路徑中的資料節點的管理員狀態。為了向後相容性,需要一個特殊標記來傳回維護狀態。
hdfs fsck <path> // only show decommission state hdfs fsck <path> -maintenance // include maintenance state