本文介紹YARN高可用特性以及相關配置項。
基本介紹
Hadoop YARN是基於Master與Slave主從架構的分布式叢集資源管理系統,其中RM (ResourceManager) 是Master組件,負責整個叢集的資源管理與任務調度,NM (NodeManager) 是Slave組件,負責單個節點的任務管理與監控。
YARN高可用特性主要包括以下三個方面:
RM HA(ResourceManager High Availability)能夠支援在不同節點上啟動多個ResourceManager進程,可以避免單點故障。更多內容,請參見ResourceManager High Availability。
RM有狀態重啟(ResourceManager Restart)能夠持續將應用資訊與目前狀態即時同步至Zookeeper分布式儲存中,並在啟動時重新載入應用狀態,保證叢集升級或重啟後應用可以自動回復。更多內容,請參見ResourceManager Restart。
NM有狀態重啟(NodeManager Restart)能持續將運行時的任務(Container)資訊與狀態同步至LevelDB等本機存放區中,並在啟動時重新載入任務狀態,保證運行中任務在節點升級或重啟時不受影響。更多內容,請參見NodeManager Restart。
基於以上特性,在通常情況下,對於RM單點故障、RM升級或重啟、NM升級或重啟等常見情境,可以做到應用無感知,任務運行時不受任何影響。
依賴服務
YARN高可用特性依賴ZooKeeper服務實現分布式選舉與應用資訊和狀態中繼資料的儲存,保證叢集的強一致性。依賴的ZooKeeper服務配置項如下表。
配置集 | 配置項 | (推薦)配置值 | 說明 |
core-site.xml | hadoop.zk.address | <zk1-host>:<zk1-port>,<zk2-host>:<zk2-port>,<zk3-host>:<zk3-port> | ZooKeeper服務地址,用於儲存leader-election、應用資訊與狀態等,多個使用英文半形逗號(,)分隔。 |
特性說明
RM HA
RM HA工作原理是在不同節點上啟動多個RM進程,通過Leader選舉決定有且只有1個Active RM,並由Active RM記錄應用的基本資料與狀態,寫入Zookeeper儲存中。如果Active RM進程或其所在節點存在問題,Standby RM能夠基於Zookeeper的分布式鎖機制選舉出1個Active RM,新的Active RM將從Zookeeper儲存中恢複出全部應用的資訊與狀態,繼續提供資源管理與調度服務,從而避免單點故障。
RM HA相關的重要配置項如下表。
配置集 | 配置項 | (推薦)配置值 | 說明 |
yarn-site.xml | yarn.resourcemanager.ha.enabled | true | 是否開啟HA特性,預設值false。 |
yarn.resourcemanager.ha.automatic-failover.enabled | true或者不配置 | 是否啟用自動切換,預設值true。 | |
yarn.resourcemanager.ha.automatic-failover.embedded | true或者不配置 | 是否使用嵌入的自動切換方式,預設值true。 | |
yarn.resourcemanager.ha.curator-leader-elector.enabled | true | 是否使用非Curator組件,預設值false。 | |
yarn.resourcemanager.ha.automatic-failover.zk-base-path | 不配置 | Zookeeper的leader-elector根目錄,預設值/yarn-leader-election。 | |
yarn.resourcemanager.ha.rm-ids | rm1,rm2,rm3 | 多個RM的ID列表,使用英文半形逗號(,)分隔。 | |
yarn.resourcemanager.cluster-id | <cluster-id> | 叢集ID,Zookeeper儲存路徑中依賴。 | |
yarn.resourcemanager.hostname.<rm-id> | 不配置 | hostname(RM執行個體級配置,有多個RM執行個體)。 | |
yarn.resourcemanager.address.<rm-id> | 不配置 | Client提交作業的RPC地址(RM執行個體級配置,有多個RM執行個體)。 | |
yarn.resourcemanager.scheduler.address.<rm-id> | 不配置 | ApplicationMasters申請資源的RPC地址(RM執行個體級配置,有多個RM執行個體)。 | |
yarn.resourcemanager.resource-tracker.address.<rm-id> | 不配置 | NodeManagers彙報資源與任務狀態的RPC地址(RM執行個體級配置,有多個RM執行個體)。 | |
yarn.resourcemanager.admin.address.<rm-id> | 不配置 | Admin命令提交的RPC地址(RM執行個體級配置,有多個RM執行個體)。 | |
yarn.resourcemanager.webapp.address.<rm-id> | 不配置 | HTTP訪問地址(RM執行個體級配置,有多個RM執行個體)。 | |
yarn.resourcemanager.webapp.https.address.<rm-id> | 不配置 | HTTPS訪問地址,僅當 |
RM有狀態重啟
RM有狀態重啟包含兩種模式:
非工作保持(Non-work-preserving):RM重啟後根據恢複的應用資訊與狀態,重新提交所有的運行中應用。對應用影響較大,所有運行中的應用都會被停止然後重新提交運行。
工作保持(Work-preserving):RM重啟後根據恢複的應用資訊與狀態,自動接管當前所有運行中的應用,盡量避免運行中應用受影響。
RM HA的工作保持模式的重要配置如下表。
配置集 | 配置項 | (推薦)配置值 | 說明 |
yarn-site.xml | yarn.resourcemanager.recovery.enabled | true | 是否啟用RM有狀態重啟特性,預設值false。 |
yarn.resourcemanager.work-preserving-recovery.enabled | true或者不配置 | 是否啟用工作保持模式,預設值true。 | |
yarn.resourcemanager.store.class | org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore | RM狀態儲存類,只有Zookeeper儲存支援RM HA。 | |
yarn.resourcemanager.zk-state-store.parent-path | 不配置 | RM維護的應用資訊與狀態在Zookeeper中的儲存路徑,預設/rmstore。 |
NM有狀態重啟
NM有狀態重啟能夠在NM短時間內重啟恢複後,保證節點上啟動並執行任務(Container)繼續運行,無需停止並重新調度,從而滿足應用無感知的基本要求。
NM有狀態重啟的重要配置項如下表。
配置集 | 配置項 | (推薦)配置值 | 說明 |
yarn-site.xml | yarn.nodemanager.recovery.enabled | true | 是否啟用NM有狀態重啟特性,預設值false |
yarn.nodemanager.recovery.dir | /home/hadoop/yarn-nm-recovery | 儲存任務資訊與狀態資料的本地目錄,預設值為 建議將該目錄存放在系統硬碟非/tmp目錄下,並且確保hadoop使用者有讀寫權限(推薦使用 | |
yarn.nodemanager.recovery.supervised | true | 是否在NM退出時保留本機資料以便能在重啟後恢複,預設值false。 | |
yarn.nodemanager.address |
| NM RPC地址,也用作NM ID。
|