YARN 非常容易擴充:任何新的 NodeManager 都可以加入已設定的 ResourceManager 並開始執行工作。但要達成完全彈性,我們需要一個停用程序,有助於移除現有節點並縮小叢集規模。
YARN 節點可以正常或優雅地停用。
YARN 節點的正常停用表示立即關閉。
YARN 節點的優雅停用是停用 NM 的機制,同時將對正在執行的應用程式的影響降至最低。一旦節點進入 DECOMMISSIONING 狀態,RM 便不會在該節點上排程新的容器,並會等到正在執行的容器和應用程式完成(或直到停用逾時),才會將節點轉移至 DECOMMISSIONED。
執行一般停用
yarn jar...
)yarn.resourcemanager.nodes.exclude-path
屬性新增至您的 yarn-site.xml
(注意:您不需要重新啟動 ResourceManager)./bin/yarn rmadmin -refreshNodes
在下一節中,我們將介紹一些更詳細的用法(例如:使用具有逾時功能的優雅停用)。
yarn rmadmin -refreshNodes [-g [以秒為單位的逾時] -client|server]
會通知 NodesListManager 偵測並處理包含和排除主機變更。NodesListManager 會從排除檔案載入已排除的主機,如 yarn-site.xml 中的 yarn.resourcemanager.nodes.exclude-path
設定所指定。(注意:變更排除路徑時不需要重新啟動 RM,因為每次 refreshNodes
指令都會重新讀取此設定)
檔案格式可以是純文字或 XML,視檔案的副檔名而定。只有 XML 格式支援針對每個節點的優雅停用逾時。
NodesListManager 會檢查並比較資源管理員中的 RMNodes 狀態和排除清單,並根據下列規則套用必要的動作
-g
旗標,則立即停用尚未處於 DECOMMISSIONED 狀態的已排除節點。因此,會將 RECOMMISSION、GRACEFUL_DECOMMISSION 或 DECOMMISSION RMNodeEvent 傳送至 RMNode。
為了支援使用單一或多個 refreshNodes 要求透過不同逾時優雅地停用節點,HostsFileReader 支援在排除主機檔案中每個主機名稱(或 IP)之後提供選用的逾時值。
針對特定主機使用的有效停用逾時基於下列優先順序
如果發生伺服器端逾時
yarn rmadmin -refreshNodes -g [以秒為單位的逾時] -server|client
中的逾時;如果發生用戶端逾時(見下方)
-g
旗標定義的命令列參數會被使用。NodesListManager 決定要使用的有效逾時,並將其設定在個別 RMNode 上。逾時也可以透過 yarn rmadmin -refreshNodes -g [以秒為單位的逾時]
指令動態調整。NodesListManager 會解析要使用的有效逾時,並視需要更新 RMNode 的新逾時。逾時變更不會重設進行中的解除委派,只會影響評估節點是否已達到解除委派逾時。
以下是 xml 格式的範例排除檔案。
<?xml version="1.0"?> <hosts> <host><name>host1</name></host> <host><name>host2</name><timeout>123</timeout></host> <host><name>host3</name><timeout>-1</timeout></host> <host><name>host4, host5,host6</name><timeout>1800</timeout></host> </hosts>
如果排除檔案的副檔名不是 xml,則會使用標準的每行一個主機格式,不支援逾時。
host1 host2 host3
注意:未來計畫有更多支援逾時的檔案格式。如果您有興趣,請追蹤 YARN-5536。
重要的是要注意,逾時不會持續存在。如果發生 RM 重新啟動/故障轉移,節點將會立即解除委派。(追蹤 YARN-5464 以了解此行為的變更)。
優雅解除委派的逾時可以在伺服器端或用戶端追蹤。-client|server
表示逾時追蹤應由用戶端或 ResourceManager 處理。用戶端追蹤會封鎖,而伺服器端追蹤則不會。
在收到 GRACEFUL_DECOMMISSION 事件時,RMNode 會儲存解除委派逾時(如果已指定),更新優雅解除委派的指標,並保留其原始總容量,並轉換為 DECOMMISSIONING 狀態。
資源會在 DECOMMISSIONING RMNode 上動態且定期更新,因此排程器不會在上面排程新的容器,因為沒有可用資源。
DecommissioningNodeWatcher 是 YARN 組件,在客戶端/管理員提出正常解除委派要求後,會自動且非同步追蹤 DECOMMISSIONING 節點狀態。NM 會定期傳送 RM 心跳,並附上最新的容器狀態。DecommissioningNodeWatcher 會追蹤所有 DECOMMISSIONING 節點的心跳更新,以決定在節點上的所有執行中容器完成後,何時會轉換為 DECOMMISSIONED 狀態,並在轉換後通知 NodeManager 關閉。
在 MR 應用程式中,節點在完成所有容器後,可能仍會在應用程式期間提供其對應的輸出資料,供 reducer 使用。YARN 正常解除委派機制會保留此類 DECOMMISSIONING 節點,直到所有相關應用程式完成。然而,在長時間執行的應用程式場景中,這可能會造成許多「閒置」節點長時間存在,這是不理想的。DecommissioningNodeWatcher 會透過逾時平衡此類問題,無論執行中容器或應用程式如何,DECOMMISSIONING 節點都會在解除委派逾時之前解除委派。如果執行中容器較早完成,它會繼續等待應用程式完成,直到解除委派逾時。當解除委派逾時時,節點會不論如何解除委派。節點會停用,而擁有的工作會視需要重新排程。
所有解除委派節點的狀態會定期記錄在資源管理員記錄檔中(每 20 秒)。以下是解除委派節點的子狀態
屬性 | 值 |
---|---|
yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs | YARN 節點正常解除委派逾時(秒)。這是將 DECOMMISSIONING 節點轉換為 DECOMMISSIONED 之前,等待執行中容器和應用程式完成的最長時間。預設值為 3600 秒。負值(例如 -1)會視為無限逾時。 |
yarn.resourcemanager.decommissioning-nodes-watcher.poll-interval-secs | DecommissioningNodesWatcher 內部輪詢計時器工作執行週期(秒),用於識別和處理遺失定期心跳的 DECOMMISSIONING 節點。預設值為 20 秒。 |
yarn.resourcemanager.nodes.exclude-path | 路徑指向包含要排除節點的文件。 |
yarn.resourcemanager.nodes.include-path | 路徑指向包含要包含節點的文件。 |