1 介紹
ResourceManager(RM)負責跟蹤群集中的資源,并排程應用程式(例如MapReduce作業)。在Hadoop 2.4之前,ResourceManager是YARN群集中的單點故障。高可用性功能以“活動/備用ResourceManager”對的形式添加了備援,以消除此單點故障。
2 YARN-HA工作機制
2.1 官方文檔
https://hadoop.apache.org/docs/r2.7.4/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html
2.2 工作機制

2.3 RM故障轉移
ResourceManager HA通過Active / Standby體系結構實作-在任何時間,RM之一都處于活動狀态,并且一個或多個RM處于Standby模式,等待活動發生任何事情。啟用自動故障轉移後,轉換為活動狀态的觸發來自管理者(通過CLI)或內建的故障轉移控制器。
手動轉換和故障轉移
如果未啟用自動故障轉移,則管理者必須手動将其中一個RM轉換為Active。要從一個RM到另一個RM進行故障轉移,他們應該先将Active-RM轉換為Standby,然後将Standby-RM轉換為Active。所有這些都可以使用“ yarn rmadmin ” CLI完成。
自動故障轉移
RM可以選擇嵌入基于Zookeeper的ActiveStandbyElector,以确定哪個RM應該是Active。當Active發生故障或無響應時,另一個RM被自動選為Active,然後接管。請注意,無需像HDFS那樣運作單獨的ZKFC守護程式,因為嵌入在RM中的ActiveStandbyElector充當故障檢測器和上司選舉人,而不是單獨的ZKFC守護程序。
RM故障轉移上的用戶端,ApplicationMaster和NodeManager
當有多個RM時,預計用戶端和節點使用的配置(yarn-site.xml)會列出所有RM。用戶端,ApplicationMaster(AM)和NodeManager(NM)嘗試以循環方式連接配接到RM,直到它們到達活動RM。如果活動伺服器出現故障,他們将繼續輪詢,直到命中“新”活動伺服器為止。此預設重試邏輯實作為org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider。您可以通過實作org.apache.hadoop.yarn.client.RMFailoverProxyProvider并将yarn.client.failover-proxy-provider的值設定為類名來覆寫邏輯。
3 配置YARN-HA叢集
3.1 環境準備
(1)修改IP
(2)修改主機名及主機名和IP位址的映射
(3)關閉防火牆
(4)ssh免密登入
(5)安裝JDK,配置環境變量等
(6)配置Zookeeper叢集
3.2 叢集規劃
master-node | slave-node1 | slave-node2 |
NameNode JournalNode DataNode ZK ResourceManager NodeManager | NameNode JournalNode DataNode ZK ResourceManager NodeManager | JournalNode DataNode ZK NodeManager |
3.3 配置
(1)配置yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--啟用resourcemanager ha-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--聲明兩台resourcemanager的位址-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>myyarncluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master-node</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave-node1</value>
</property>
<!--指定zookeeper叢集的位址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master-node:2181,slave-node1:2181,slave-node2:2181</value>
</property>
<!--啟用自動恢複-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定resourcemanager的狀态資訊存儲在zookeeper叢集-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
</configuration>
(2)同步更新其他節點的配置資訊(分發腳本)
3.4 啟動(hdfs,yarn)
1)啟動hdfs
HDFS-HA配置參考:https://blog.csdn.net/weixin_38023225/article/details/101346493
2)啟動yarn
(1)在master-node中執行:
[[email protected] hadoop-2.7.4]$ sbin/start-yarn.sh
(2)在slave-node1中執行:
[[email protected] hadoop-2.7.4]$ sbin/yarn-daemon.sh start resourcemanager
(3)檢視服務狀态
[[email protected] hadoop-2.7.4]$ bin/yarn rmadmin -getServiceState rm1
active
[[email protected] hadoop-2.7.4]$ bin/yarn rmadmin -getServiceState rm2
standby