概述
ResourceManager是集群中绝对的资源管理工具,并且调度应用在YARN上运行。因此对于YARN来说是一个单点问题。这个文档介绍RM的重启。
有2种重启的方式:
1.非工作保留RM重启:就是RM重启并不保存工作,并且会重启之前运行的应用
2.工作保留RM重启:RM重启会保留工作状态,并不会让工作的应用重启。
特性
非工作保留RM重启
非工作保留RM重启,RM会保存应用的元数据。当RM关闭,只要被请求的信息可用,当RM重启的时候,会获取应用的源信息并且重新提交应用。如果已经完成的app RM不会重复提交。
NodeManagers和client在RM down的时候一直和RM交互,知道RM启动。当RM起来会发送一个同步命令到NodeManager和AM。NM会kill所有被管理的容器然后重新注册到RM中。重新注册的NodeManager和新加入的NM类似。AM当收到同步命令的时候会被关闭。然后RM重启获取所有应用元数据,这证书放入内存。并且为没有完成的应用创建AM,之前运行的应用工作其实就是丢失了。相当于被kill,然后重新启动了。
工作保留RM重启
工作保留RM重启,RM会保存应用的状态并且在恢复的时候重新加载这些状态,这个重启主要是在于重新构建YARN集群的运行状态,主要是集群中容器的生命周期,应用的headroom,资源请求,队列的资源使用等等。这样rm不需要kill AM然后重新运行应用。应用可以简单的和RM同步恢复之前丢失的状态。
RM恢复运行状态是利用从NM发过来的容器的运行状态。NM不会kill容器。当NM注册的时候,会继续管理容器并且发送容器状态到RM。RM重新构建容器实例并且关联应用的调度状态。同时AM也需要重新发送资源请求到RM,可能之前丢失了。这些由AMRMClient lib完成。
配置
Enable RM Restart
属性 | 值 |
---|---|
yarn.resourcemanager.recovery.enabled | true |
配置RM状态的保存
属性 | 值 |
---|---|
yarn.resourcemanager.store.class | 类名用来配置rm状态保存的位置,Zookeeper:org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore ,Hadoop文件系统:org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore,LevelDB:org.apache.hadoop.yarn.server.resourcemanager.recovery.LeveldbRMStateStore,默认:org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore |
配置工作保留RM恢复
属性 | 值 |
---|---|
yarn.resourcemanager.work-preserving-recovery.scheduling-wait-ms | 设置RM在分配新的容器之前,等待工作恢复的时间。 |