基于Zookeeper的ResourceManager-HA配置
前言
在YARN中,Resource Manager(RM,资源管理器)负责整个系统的资源管理和调度,在2.4版本以前,它一直是整个YARN集群的单点故障。新的ResourceManager HA通过冗余一个Resource Manager形成一种Active/Standby的架构来避免ResourceManager的单点故障。
在ResourceManager HA架构中,任意时刻只会有一个ResourceManager处于Active状态,其他的RMs都处于Standby状态并等待着当Active RM出现故障时接管它的工作。触发ResourceManager切换为Active有以下两种方式:
方式一 自动故障转移
RMs提供了选项让我们使用Zookeeper的ActiveStandbyElector来决定哪一个RM应该为Active。当Active RM出现故障时,另一个RM会自动地被切换为Active并接管先前Active RM的工作。与HDFS中NameNode HA不同,由于ResourceManager HA内嵌的ActiveStandbyElector 已经同时起到了故障检测和Leader选举的作用,因此没有必要再启动一个独立的ZKFC 守护进程了。
方式二 手动切换并故障转移
如果自动故障转移未被启用,管理员需要使用 yarn rmadmin 命令手动地将RMs中的一个切换为Active。
当Active RM故障
如果我们在yarn-site.xml配置文件中配置了多个ResourceManager,Clients,ApplicationMasters (AMs) 和 NodeManagers (NMs)会尝试着轮询连接RMs中的每一个直到连接Active RM成功。
如果Active RM挂掉了,它们会重新轮询直到命中新的Active RM。默认的重试逻辑实现类为 org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider,你可以通过实现 org.apache.hadoop.yarn.client.RMFailoverProxyProvider 重写重试逻辑并将yarn-site.xml中的 yarn.client.failover-proxy-provider 的值配置成你的自定义类。
搭建Zookeeper集群
首先你需要搭建好Zookeeper集群,关于Zookeeper集群的安装方法,请移步:
https://blog.csdn.net/pengjunlee/article/details/81637024
我搭建好的Zookeeper集群信息如下:
Host Name | IP Address | Zookeeper Port |
hadoop34 | 172.16.250.234 | 2181 |
hadoop39 | 172.16.250.239 | 2181 |
hadoop40 | 172.16.250.240 | 2181 |
Zookeeper集群搭建完成之后,在3台Zookeeper节点上分别执行以下命令启动Zookeeper服务:
hadoop@hadoop34 conf]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
启用RM 重启恢复特性
使用Zookeeper作为RM状态的存储介质需要在yarn-site.xml中增加如下配置:
<property><name>yarn.resourcemanager.recovery.enabled</name><value>true</value><description>Enable RM to recover state after starting. If true, then yarn.resourcemanager.store.class must be specified</description>
</property>
<property><name>yarn.resourcemanager.store.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value><description>The class to use as the persistent store.</description>
</property>
<property><name>yarn.resourcemanager.zk-address</name><value>hadoop34:2181,hadoop39:2181,hadoop40:2181</value><description>Comma separated list of Host:Port pairs. Each corresponds to a ZooKeeper server(e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002") to be used by the RM for storing RM state.This must be supplied when using org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore as the value for yarn.resourcemanager.store.class</description>
</property>
目前可用的RM 状态存储实现类有如下三个:
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore # a ZooKeeper based state-store implementation .
org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore # a Hadoop FileSystem based state-store implementation like HDFS and local FS , default .
org.apache.hadoop.yarn.server.resourcemanager.recovery.LeveldbRMStateStore # a LevelDB based state-store implementation.
不同实现类的配置方式有所不同,详情请参考:
http://hadoop.apache.org/docs/r2.9.1/hadoop-yarn/hadoop-yarn-site/ResourceManagerRestart.html
配置自动故障转移
下表列举了一些与ResourceManager HA相关的必须或者重要的配置项。
Configuration Properties | Description |
yarn.resourcemanager.zk-address | 指定用于存储RM状态和进行Leader选举所使用的ZK-quorum列表。 |
yarn.resourcemanager.ha.enabled | 启用RM HA。 |
yarn.resourcemanager.ha.rm-ids | 列出RMs的逻辑IDs,例如:“rm1,rm2”。 |
yarn.resourcemanager.hostname.rm-id | 指定每一个rm-id代表的RM所对应的主机名。 |
yarn.resourcemanager.address.rm-id | 指定每一个rm-id用来让客户端提交任务的主机名和端口号,如果设置了该属性将自动覆盖in yarn.resourcemanager.hostname.rm-id的配置。 |
yarn.resourcemanager.scheduler.address.rm-id | 指定每一个rm-id用来让ApplicationMasters获取资源的调度器主机名和端口号,如果设置了该属性将自动覆盖in yarn.resourcemanager.hostname.rm-id的配置。 |
yarn.resourcemanager.resource-tracker.address.rm-id | 指定每一个rm-id用来让NodeManagers连接的主机名和端口号,如果设置了该属性将自动覆盖in yarn.resourcemanager.hostname.rm-id的配置。 |
yarn.resourcemanager.admin.address.rm-id | 指定每一个rm-id,管理命令的主机名和端口号,如果设置了该属性将自动覆盖in yarn.resourcemanager.hostname.rm-id的配置。 |
yarn.resourcemanager.webapp.address.rm-id | 指定每一个rm-id代表的RM所对应的HTTP-Web管理界面的主机名和端口号,如果 yarn.http.policy 为 HTTPS_ONLY,该配置将被忽略。如果设置了该属性将自动覆盖in yarn.resourcemanager.hostname.rm-id的配置。 |
yarn.resourcemanager.webapp.https.address.rm-id | 指定每一个rm-id代表的RM所对应的HTTPS-Web管理界面的主机名和端口号,如果 yarn.http.policy 为 HTTP_ONLY,该配置将被忽略。如果设置了该属性将自动覆盖in yarn.resourcemanager.hostname.rm-id的配置。 |
yarn.resourcemanager.ha.id | 指定当前RM的ID。 |
yarn.resourcemanager.ha.automatic-failover.enabled | 启用自动故障转移,缺省情况下,它只会在启用HA配置的情况下生效。 |
yarn.resourcemanager.ha.automatic-failover.embedded | 自动故障转移时是否使用内嵌的Leader选举策略选举 Active RM。缺省情况下,它只会在启用HA配置的情况下生效。 |
yarn.resourcemanager.cluster-id | 指定当前RM集群的ID。供RM使用,以确保被选为Active的RM不会误接管其他集群。 |
yarn.client.failover-proxy-provider | 客户端,AMs和NMs在故障转移时寻找新 Active RM所使用的实现类。 |
yarn.client.failover-max-attempts | FailoverProxyProvider尝试故障转移的最大次数。 |
yarn.client.failover-sleep-base-ms | 用于计算故障切换之间的指数延迟的睡眠基数(以毫秒为单位)。 |
yarn.client.failover-sleep-max-ms | 故障切换之间的最长休眠时间(以毫秒为单位)。 |
yarn.client.failover-retries | 每次尝试连接到ResourceManager时的重试次数。 |
yarn.client.failover-retries-on-socket-timeouts | 每次尝试在套接字超时时连接到ResourceManager的重试次数。 |
如果你想获取YARN的更多配置项的详细信息或查看各个配置项的默认值,请移步:
http://hadoop.apache.org/docs/r2.9.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
本文使用RM故障转移的最简配置,yarn-site.xml内容如下:
<property><name>yarn.resourcemanager.ha.enabled</name><value>true</value>
</property>
<property><name>yarn.resourcemanager.cluster-id</name><value>yarncluster</value>
</property>
<property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value>
</property>
<property><name>yarn.resourcemanager.hostname.rm1</name><value>hadoop39</value>
</property>
<property><name>yarn.resourcemanager.hostname.rm2</name><value>hadoop40</value>
</property>
<property><name>yarn.resourcemanager.webapp.address.rm1</name><value>hadoop39:8088</value>
</property>
<property><name>yarn.resourcemanager.webapp.address.rm2</name><value>hadoop40:8088</value>
</property>
<property><name>yarn.resourcemanager.zk-address</name><value>hadoop34:2181,hadoop39:2181,hadoop40:2181</value>
</property>
<property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value>
</property>
在完成了上述的配置之后将配置拷贝到Hadoop的所有节点,然后按照如下流程启动集群:
==>启动Zookeeper集群
==>执行 start-dfs.sh 启动HDFS集群
==>分别在ResourceManager节点上执行yarn-daemon.sh start resourcemanager 启动RM
启动成功之后执行如下命令查看RMs的状态:
[hadoop@hadoop40 zookeeper-3.4.12]$ yarn rmadmin -getServiceState rm1
active
[hadoop@hadoop40 zookeeper-3.4.12]$ yarn rmadmin -getServiceState rm2
standby
在浏览器地址栏输入地址:http://172.16.250.239:8088 ,rm1的后台管理界面如下图所示。
由于当前rm1是Active,如果访问rm2的后台管理界面将会自动重定向到rm1的后台管理界面。
宕机测试
在rm1执行如下命令来模拟rm1宕机的情况:
# 停止ResourceManager
[hadoop@hadoop39 redis-4.0.10]$ yarn-daemon.sh stop resourcemanager
# 再次查看rm2的状态
[hadoop@hadoop39 redis-4.0.10]$ yarn rmadmin -getServiceState rm2
active
参考文章:http://hadoop.apache.org/docs/r2.9.1/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html
基于Zookeeper的ResourceManager-HA配置相关推荐
- (超详细)基于Zookeeper的Hadoop HA集群的搭建
基于Zookeeper的Hadoop HA集群的搭建 JunLeon--go big or go home 前言: 高可用(high availability,HA)指的是若当前工作中的机器宕机了,系 ...
- 基于ZooKeeper的Hadoop HA集群搭建
集群的规划 Zookeeper集群: 192.168.142.12 (bigdata12) 192.168.142.13 (bigdata13) 192.168.142.14 (bigdata14) ...
- 基于Zookeeper的Spark HA配置说明
默认情况下在Spark standalone集群中进行计算时,由于是RDD的计算模型,所以可以认为worker 已经是有HA特性的了,但是负责资源调度的Master节点有可能出现单点故障.所以为了保证 ...
- Spark HA高可用部署、基于文件系统单点恢复、基于zookeeper的Standby Master、如何恢复到上一次活着master挂掉之前的状态 03
1. Spark HA高可用部署 Spark Standalone集群时Master-Slaves架构的集群模式,和大部分的Master-Slaves结果集群一样,存在着Master单点故障的问题.如 ...
- 基于32位版CentOS6配置符合HA模式的CDH5.7.0的Hadoop+Yarn+HBase集群
本文参考资料来源: 1,Hadoop完全分布式 -- HA配置 - WarmthYan - CSDN博客 https://blog.csdn.net/qq_33187206/article/deta ...
- Spark集群基于Zookeeper的HA搭建部署笔记(转)
原文链接:Spark集群基于Zookeeper的HA搭建部署笔记 1.环境介绍 (1)操作系统RHEL6.2-64 (2)两个节点:spark1(192.168.232.147),spark2(192 ...
- 基于ZooKeeper实现HA高可用性以及自动主备切换
默认情况下,standalone cluster manager对于worker节点的失败是具有容错性的(迄今为止,Spark自身而言对于丢失部分计算工作是有容错性的,它会将丢失的计算工作迁移到其他w ...
- 基于Zookeeper搭建hadoop的HA功能
简介 使用zookeeper和Hadoop的FailOverController的心跳检测来维护hadoop,并在hadoop宕机的时候通过zookeeper选举功能进行Active的切换 并使用Jo ...
- 基于zookeeper实现分布式配置中心(二)
上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理.接下来根据zookeeper的特性,简单实现一个分布式配置中心. 配置中心的优势 1.各环境配置集中 ...
最新文章
- SpringBoot项目打包war部署到服务器去掉项目名所遇到的坑
- 没学过编程能学python吗_没有编程基础,可以自学Python吗?
- [Tips]Linux在命令行中打开图形化程序的各种命令
- STL常用的算术和生成算法
- html导航教程视频,导航_HTML+CSS前端基础知识教程_腾讯视频
- android内存置换,课内资源 - 基于Android实现的页面置换模拟
- 自建latex服务器,通过在线服务器编译LaTeX
- 维护老客户,比发展新客户,成本要低得多
- Linux下PHP开启Oracle支持(oci8)
- Linux操作系统原理— 进程与线程管理
- 卫星遥感影像查询网址
- 空气质量等级c语言编程,字节跳动2018秋招编程题——空气质量
- 百思不得其姐关注模块的推荐关注中 右侧TableView刷新细节
- UVa OJ 10909-Soya Milk
- 中文文本情感分类(基于LSTM和textCNN)
- 七、手写实现决策树算法
- SolidWorks装配模块四连杆运动仿真…
- Linux/UNIX命令dd简介
- ZGC学习笔记:ZGC简介和JDK17对ZGC的优化
- redis报错 oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
热门文章
- 笔记本电脑无法搜索到wifi
- 易基因技术推介|简化基因组甲基化测序研究解决方案
- macOS 下 Electron 程序的签名及公证
- 【BZOJ4372】烁烁的游戏 动态树分治+线段树
- 如何将知识结构化,形成知识管理体系(干货分享)
- 语音转文字转换器怎么用,免费的语音转文字方法介绍
- 安卓开发: Jetpack compose + kotlin 实现 俄罗斯方块游戏
- iPad闪屏跳动怎么回事?怎么解决?
- MPU6050加速度传感器学习笔记之传感器
- The HTTP header line [connection : Keep-alive] does not conform to RFC 7230 and has been ignored