本文固定链接:https://www.askmac.cn/archives/hadoop-resourcemanger-restart.html
原文地址:http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/ResourceManagerRestart.html
1.概述
资源管理器是在YARN中管资源和调度应用程序的运行的中央管理者。所以这再YARN集群中是一个潜在的单点故障点。这个文档为资源管理器重启提供了一个概述,一个资源管理的增强功能,可以让其在重启中保持功能,使得最终用户感觉不到资源管理器的停止时间。
ResourceManager Restart 特性分为2个阶段:
1.阶段1(非工作保留 RM 重启):增强RM何以保留应用程序/试图 的状态和其他在可拔插存储的凭证信息。RM将从这些存储的地方重新加载信息,在重启和重新启动之前运行的应用程序时。用户不需要重新提交应用程序(www.askmac.cn)。
2.阶段2(保留工作重启):集中重新构建RM运行状态,通过联合NodeMangagers个容器状态和ApplicationMasters在重启时的容器请求。和阶段1的主要区别是,之前运行的应用程序在RM重启后不会被杀掉,所以应用程序不会由于RM重启而丢失其工作。
2.特性
1.阶段1:非工作保留 RM 重启
在hadoop 2.4.0版本,RM重启只实现了之前接受的阶段1.
总体的概念是,RM将在应用程序完成,客户端提交一个应用程序和保留完成状态(失败,被杀死,完成)时保留应用程序的元数据(即applicationsubmissioncontext)。此外,RM也保留安全凭证,安全环境的tokens。在任何RM关闭的时候,只要所需的信息(即应用程序的元数据和凭据)在存储区是可用的,当RM重启时,其可以加快应用程序的重新提交。RM不会重新提交那些已经完成的应用程序(即失败,被杀死,完成)
NodeManagers和客户端在RM停机时间会保持轮询,直到RM启动。当RM活动后,其将通过心跳,发送一个重新同步的命令到所有的NodeMangers和ApplicationMasters。作为hadoop2.4版本,(www.askmac.cn)NodeMangers和ApplicationMasters处理此命令的行为:NMs将杀死所有其管理的容器和重新注册到RM。从RM来看,这些重新注册的NMs和新加入的NMS类似。AMs(例如,MapReduce AM)被期望关闭,当它们接受到重新同步命令时。当RM重启并从存储区加载所有应用程序元数据并传递它们到内存后,其将为那些还没完成的应用程序创建一个新的尝试并像普通那样重新启动应用程序。如上所述,之前允许的应用程序的工作回丢失,因为本质上是被RM在重启时通过重新同步的命令杀死了。
阶段2:保留工作RM重启
作为Hadoop 2.6,我们将进一步的增强RM重启特性专注这个问题,在RM重启时,不会杀死YARN集群中任何运行的应用程序。
在完成阶段1的基础上,进一步超越来保证保留应用程序的状态和在恢复时重新加载状态。阶段2主要集中在重新构建YARN集群的整个运行状态,其中大多是在RM中保持的容器生命周期的状态,应用程序的空间和资源请求,队列资源使用等等。这样,RM就不用杀掉AM和重新运行在阶段1完成的应用程序。应用程序可以简单的在RM中重新同步并且从它们离开的地方恢复。(www.askmac.cn)
RM通过利用所有NMS发送的容器状态来恢复其运行状态。当RM被重启时,NM不会杀死容器在其重新同步时。当其重新注册时,其继续管理容器和发送容器的状态到RM。RM通过吸收这些容器的信息,重建容器实例和相关的应用程序调度状态。在此期间,AM需要重新发送未完成的资源请求到RM,因为RM可能在其关闭的时候丢失这些未完成的请求。应用程序的写使用AMRMClient库来与RM通信,而不用担心在再同步时,AM重新发现资源请求到RM的这部分,因为其是自动的通过其自身库照看的。
3. 配置
这些选项描述了启用RM重启特性的配置(www.askmac.cn)
3.1 启用RM restart
属性 | 描述 |
yarn.resourcemanager.recovery.enabled | True |
3.2 为RM保留状态配置状态存储区
属性 | 描述 |
yarn.resourcemanager.store.class | 这个存储区的类名被用来保存应用程序/尝试状态和凭证。实现可用的存储区的是org.apache.hadoop.yarn.server.resourcemanager.recovery。ZKRMStateStore 一个基于ZooKeeper存储区的实现和org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore,一个基于Hadoop文件系统存储区的实现例如HDFS和本地FS。org.apache.hadoop.yarn.server.resourcemanager.recovery。LeveldbRMStateStore,一个基于LevelDB的存储区实现。默认值是org.apache.hadoop.yarn.server.resourcemanager.recovery。
FileSystemRMStateStore. |
3.3 如何选择存储区实现
1.基于ZooKeeper的状态存储:用户可以使用任何空闲存储来设置RM重启,但是必须使用基于ZooKeeper的状态存储来支持RM HA。原因是只用基于ZooKeeper支持围栏机制,来在多个假设都是活动的并且可以同时编辑状态存储的RMs中避免脑裂。(www.askmac.cn)
2.基于文件系统的状态存储: 支持基于HDFS和本地FS的状态存储。围栏机制不被支持。
3.基于LevelDB的状态存储:基于LevelDB的状态存储,比基于ZooKeeper的状态存储和基于文件系统的状态存储更轻量级。LevelDB支持更好的原子操作,减少在每个状态更新的I/O,和文件系统上更少的总文件。不支持围栏机制。
3.4 配置实现 基于Hadoop文件系统的状态存储
同时支持 实现基于HDFS和本地文件系统的状态存储。要使用的文件系统类型被方案的URI确定。例如hdfs://localhost:9000/rmstore 使用HDFS作为存储,file:///tmp/yarn/rmstore使用本地FS作为存储。如果没有方案((hdfs:// or file://)在URI中被指定,那么存储类型被在core-site.xml中的fs.defaultfs确定(www.askmac.cn)
配置URI。RM状态将被存放到Hadoop文件存储状态。
属性 | 描述 |
yarn.resourcemanager.fs.state-store.uri | URI指定了RM状态将存储的文件系统路径位置(例如:hdfs://localhost:9000/rmstore)。默认是${hadoop.tmp.dir}/yarn/system/rmstore。如果未提供文件系统名称,在*conf/core-site.xml中指定的fs.default.name将被使用。 |
配置状态存储客户端用来连接Hadoop文件系统的重试策略:
属性 | 描述 |
yarn.resourcemanager.fs.state-store.retry-policy-spec | Hadoop 文件系统客户端重试策略指定。这个是使用启用的,指定一对睡眠时间和尝试次数的值。例如(t0,n0),(t1,n1),….,默认只是(2000,500)毫秒。 |
3.5 配置基于ZooKeeper的实现状态存储
配置ZooKeeper服务器地址和RM状态存储的根路径。(www.askmac.cn)
属性 | 描述 |
yarn.resourcemanager.zk-address | 逗号分隔主机列表。每个对应一个ZooKeeper 服务器(例如“127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002”)被RM用来存储RM状态 |
yarn.resourcemanager.zk-state-store.parent-path | Znode中RM状态存储的全路径。默认是/rmstore |
配置状态策略客户端使用连接到ZooKeeper 服务器 重试策略
属性 | 描述 |
yarn.resourcemanager.zk-num-retries | 如果丢失连接尝试连接ZooKeeper的次数,默认值是500 |
yarn.resourcemanager.zk-retry-interval-ms | 当重试连接到ZooKeeper服务器之间的间隔毫秒数。默认值是2秒。 |
yarn.resourcemanager.zk-timeout-ms | Zookeeper 会话超时的毫秒数。这个配置被用来决定会话过期。会话过期发生在服务器没有接收到客户端相应(例如没有心跳)。默认值是 10秒。 |
配置ZooKeeper znodes上设置权限的ACLs。(www.askmac.cn)
属性 | 描述 |
yarn.resourcemanager.zk-acl | ACLs被用来设置ZooKeeper znodes上设置权限,默认值是world:anyone:rwcda |
3.6 配置基于LevelDB存储状态实施
属性 | 描述 |
yarn.resourcemanager.leveldb-state-store.path | RM状态将被存储的本地路径。默认值是${hadoop.tmp.dir}/yarn/system/rmstore |
3.7 配置 工作保留 RM恢复
属性 | 描述 |
yarn.resourcemanager.work-preserving-recovery.scheduling-wait-ms | 设置在RM工作保留恢复上分配新容器之前等待RM的时间。这样的等待时间给了RM在恢时同步集群中NMs的机会,在给应用程序分配新容器之前 |
4 注意
如果RM重启并工作保留恢复启用,容器ID字符串格式被改变。其使用的是这样的格式:Container_{clusterTimestamp}_{appId}_{attemptId}_{containerId}例如Container_1410901177871_0001_01_000005.
其现在被改变为:(www.askmac.cn)
Container_e{epoch}_{clusterTimestamp}_{appId}_{attemptId}_{containerId},
例如:
Container_e17_1410901177871_0001_01_000005.
在这里,额外的计数是以整数递增,从0开始,每次当RM重启时增加1.如果计数是0,这个会被忽略,并和之前的一样。
5.配置例子
下面是使用RM启用保留工作重启的最低设置,使用基于ZooKeeper状态存储。(www.askmac.cn)
<property> <description>Enable RM to recover state after starting. If true, then yarn.resourcemanager.store.class must be specified</description> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <description>The class to use as the persistent store.</description> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <property> <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> <name>yarn.resourcemanager.zk-address</name> <value>127.0.0.1:2181</value> </property>
Comment