ResourceManager HA 配置

陸續的把Hadoop集羣部署HDFS的HA配置完成,把ResourceManager的HA配置好之後,Hadoop集羣配置也算是完整了,可以滿足小型中型生產環境Hadoop集羣搭建的需要。如果真要搭建超大型的Hadoop集羣,這些只能算是參考,還需要修改很多其他參數,使性能更好一些。

ResourceManager(RM)負責跟蹤集羣中資源使用情況,調度應用程序(比如MapReduce作業)。在Hadoop 2.4之前,ResourceManager存在單點故障,需要通過其他方式實現HA。官方給出的HA方案是Active/Standby兩種狀態ResourceManager的冗餘方式,類似於HDFS的HA方案,也就是通過冗餘消除單點故障。

HA架構

下圖是ResourceManager HA方案架構圖:

RM HA

RM故障轉移

ResourceManager HA是通過Active/Standby冗餘架構實現的,在任何時間點,其中一個RM處於Active狀態,其他RM處於Standby狀態,Standby狀態的RM就等着Active撲街或被撤。通過管理員命令或自動故障轉移(需要開啓自動故障轉移配置),Standby就會轉爲Active狀態,對外提供服務。

  • 手動轉換和故障轉移:當未啓用自動故障轉移時,就需要管理員手動轉換。首先將Active狀態的RM轉爲Standby狀態,然後將一個Standby狀態的轉爲Active狀態。這些操作都需要通過yarn rmadmin命令來操作。
  • 自動故障轉移:RM可以通過內嵌的基於Zookeeper的Active/Standby選擇器決定哪個RM應該是Active狀態的。當Active性能下降或無響應時,一個Standby狀態的RM就被推舉出來,轉爲Active狀態接管。這裏不需要像HDFS的HA配置需要一個單獨的ZKFS守護進程輔助完成切換,因爲這個功能已經內嵌在RM中。

客戶端、ApplicationMaster和NodeManager在故障轉移時,會輪訓這些RM節點,知道找到Active狀態的RM。如果Active節點性能下降,他們會重新輪訓查找新的Active狀態的RM。默認的輪訓擴展是org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider。可以通過實現org.apache.hadoop.yarn.client.RMFailoverProxyProvider,並配置yarn.client.failover-proxy-provider來實現自己的邏輯。

恢復RM狀態

當啓用ResourceManger重啓狀態恢復之後,新的Active狀態的RM會加載上一個RM狀態,並根據狀態儘可能的恢復之前的操作。應用程序會定期檢查,以避免丟失數據。狀態存儲需要對Active狀態和Standby狀態的RM都可見。目前,RMStateStore有兩個持久化實現,FileSystemRMStateStoreZKRMStateStoreZKRMStateStore隱式的只允許一個RM寫入操作,可以沒有單獨的防護機制就能夠避免鬧裂問題,所以是HA集羣推薦的狀態存儲方式。使用ZKRMStateStore時,建議不要在zookeeper集羣上設置zookeeper.DigestAuthenticationProvider.superDigest配置,以確保zk管理員無法訪問YARN的信息。

部署

配置

大多數的故障轉移功能可以使用各種配置進行調整,下表是必須的和重要的參數項。完整的配置和默認值參見yarn-default.xml。關於狀態存儲參見ResourceManger狀態存儲

配置項 描述
yarn.resourcemanager.zk-address zookeeper集羣地址,用於狀態存儲和內部的leader選舉
yarn.resourcemanager.ha.enabled 開啓RM的HA
yarn.resourcemanager.ha.rm-ids RM邏輯id列表,以逗號分割,比如:rm1,rm2。
yarn.resourcemanager.hostname.[rm-id] 對於每個rm-id,需要給出hostname或ip地址。
yarn.resourcemanager.address.[rm-id] 對於每個rm-id,指定host:port地址,該配置會覆蓋yarn.resourcemanager.hostname.rm-id。
yarn.resourcemanager.scheduler.address.[rm-id] 對於每個rm-id,指定ApplicationMasters申請資源的Scheduler的host:port地址,該配置會覆蓋yarn.resourcemanager.hostname.rm-id。
yarn.resourcemanager.resource-tracker.address.[rm-id] 對於每個rm-id,指定NodeManager連接的host:port地址,該配置會覆蓋yarn.resourcemanager.hostname.rm-id。
yarn.resourcemanager.admin.address.[rm-id] 對於每個rm-id,指定管理命令操作的host:port地址,該配置會覆蓋yarn.resourcemanager.hostname.rm-id。
yarn.resourcemanager.webapp.address.[rm-id] 對於每個rm-id,指定RM的web應用host:port地址,如果設置yarn.http.policy是HTTPS_ONLY,就沒必要設置該參數。該參數會覆蓋yarn.resourcemanager.hostname.rm-id。
yarn.resourcemanager.webapp.https.address.[rm-id] 對於每個rm-id,指定RM的web應用host:port地址,如果設置yarn.http.policy是HTTP_ONLY,就沒必要設置該參數。該參數會覆蓋yarn.resourcemanager.hostname.rm-id。
yarn.resourcemanager.ha.id 用於識別HA的RM,可選配置。如果設置,需要確定所有的RM都有自己的ID。
yarn.resourcemanager.ha.automatic-failover.enabled 啓用自動故障轉移; 默認情況下,僅當HA被啓用時才啓用。
yarn.resourcemanager.ha.automatic-failover.embedded 啓用自動故障轉移時,使用嵌入式leader選舉選擇Active RM。 默認情況下,僅當HA被啓用時才啓用。
yarn.resourcemanager.cluster-id 集羣標誌,用於保證RM不會成爲另一個集羣的Active節點。
yarn.client.failover-proxy-provider 客戶端使用,用於客戶端、ApplicationMaster、NodeManager連接到新的Active的RM。
yarn.client.failover-max-attempts FailoverProxyProvider應該嘗試的最大次數。
yarn.client.failover-sleep-base-ms 用於計算故障轉移的休眠基準(單位是毫秒)。
yarn.client.failover-sleep-max-ms 故障轉移休眠最長時間(單位是毫秒)。
yarn.client.failover-retries 嘗試連接到RM的重試次數。
yarn.client.failover-retries-on-socket-timeouts 嘗試連接到RM中可允許超時連接的次數。

配置示例(配置承接hadoop集羣部署(yarn)中的,使用s107和s108作爲RM雙節點):

<!--Configurations for the state-store of ResourceManager-->
<property>
  <name>yarn.resourcemanager.recovery.enabled</name>
  <value>true</value>
</property>
<property>
  <name>yarn.resourcemanager.store.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>10.6.3.109:2181,10.6.3.110:2181,10.6.3.111:2181</value>
  <description>ZooKeeper服務的地址,多個地址使用逗號隔開</description>
</property>
<!--Configurations for HA of ResourceManager-->
<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
  <description>是否啓用HA,默認false</description>
</property>
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
  <description>最少2個</description>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>s107</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>s108</value>
</property>
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>yarn-ha</value>
  <description>集羣HA的id,用於在ZooKeeper上創建節點,區分使用同一個ZooKeeper集羣的不同Hadoop集羣</description>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>s107:8088</value>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>s108:8088</value>
</property>

啓動

可以在s107上直接通過start-yarn.sh啓動YARN,這樣在s107上會啓動ResourceManager,在其他節點上會啓動NodeManager。

需要注意的是s108上不會自己啓動ResourceManager,需要手動啓動。通過命令yarn-daemon.sh start resourcemanager手動啓動。

管理命令

對於YARN的管理前面又說到,用的命令是yarn rmadmin,可以檢查RM的健康狀態、轉換Active/Standby狀態等,需要使用yarn.resourcemanager.ha.rm-ids參數配置的RM的id作爲參數。比如,查看RM狀態:

$ yarn rmadmin -getServiceState rm1
active

$ yarn rmadmin -getServiceState rm2
standby

其他的命令可以通過yarn rmadmin -help獲取。

Web管理頁面

管理界面就是yarn.resourcemanager.webapp.address.[rm-id]配置的地址,如果訪問的是Standby的RM地址,會自動重定向到Active狀態的RM地址。About頁面除外,可以訪問About頁面查看當前哪個節點是Active狀態,哪個是Standby狀態的。


參考文章
1. ResourceManager High Availability


個人主頁: http://www.howardliu.cn

個人博文: ResourceManager HA 配置

CSDN主頁: http://blog.csdn.net/liuxinghao

CSDN博文: ResourceManager HA 配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章