ResourceManagerRestart
目前,资源管理器一共有两种重启类型。
Non-work-preserving RM restart、Work-preserving RM restart。
Non-work-preserving RM restart:
在这种重启模式下,RM 会保存应用元数据(应用提交上下文)和应用状态(failed,killed,finished),同时保存认证凭证,例如,安全key,token。只要这些信息保存了,当重启后,RM会从永久存储获取这些信息,然后重新提交应用。如果在关机之前,应用已经完成,则不会再次提交。
在RM宕机之后到启动之前,这段时间,NM和clients会轮询。当RM启动后,会发送一个re-sync命令给所有的NM和AM。NMs会杀死所有容器,然后重新注册。就想是重新加入的。AM会关机。当RM重新把相关数据加载到内存后,它会重新创建AM,让未完成的应用重新可用。所以,存在丢失问题,因为它们本质上是被kill掉的。
Work-preserving RM restart
在这种模式下,RM确保应用状态的持久化,然后在恢复的时候重载。这个重启主要关注重建在YARN集群中的entire running state。这种情况下,RM不会kill掉AM。
RM利用从所有NMs发送来的容器状态恢复自己的运行状态。NM不会kill掉运行的容器。但是AM需要重新发送资源请求,因为有可能RM丢失未完成的请求。使用AMRMClient的用户,不需要担心这些,因为它会自动处理。
配置
yarn.resourcemanager.recovery.enabled
yarn.resourcemanager.store.class:可以获得的存储类如下:
ZooKeeper based state-store:org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
FileSystem based state-store:org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore
LevelDB based state-store:org.apache.hadoop.yarn.server.resourcemanager.recovery.LeveldbRMStateStore
默认值是文件系统。
配置基于文件系统的state-store
yarn.resourcemanager.fs.state-store.uri
yarn.resourcemanager.fs.state-store.retry-policy-spec:默认值是(2000,500),格式为(t0,n0)t0:sleep t0,n0:retry
配置基于ZooKeeper的state-store
hadoop.zk.address
yarn.resourcemanager.zk-state-store.parent-path:znode,默认为/rmstore
hadoop.zk.num-retries:默认为500,如果连接丢失,尝试次数。
hadoop.zk.retry-interval.ms:默认为2sec,重试间隔。
hadoop.zk.timeout-ms:ZK会话超时时间,单位为毫秒,默认为10sec
hadoop.zk.acl:默认值为:world.anyone.rwcda
配置基于LevelDB的state-store
yarn.resoucemanager.leveldb-state-store.path:
yarn.resourcemanager.work-preserving-recovery.scheduling-wait-ms:
Enable RM to recover state after starting. If true, then
yarn.resourcemanager.store.class must be specified
yarn.resourcemanager.recovery.enabled
true
The class to use as the persistent store.
yarn.resourcemanager.store.class
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
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
hadoop.zk.address
127.0.0.1:2181