标签:hadoop-1.2.1 resourcemanager zookeeper 状态存储 applicationmaster
ResourceManager是管理资源和调度运行在YARN上的应用程序的中央机构,因此在一个YARN集群中ResourceManager可能是单点故障的,即只存在一个ResourceManager,这样在该节点出现故障时,就需要尽快重启ResourceManager,以尽可能地减少损失。本文将学习ResourceManager重启的特性,该特性使ResourceManager在重启时可以继续运行,并且在ResourceManager处于故障时对最终用户不可见。
ResourceManager重启可以划分为两个阶段。第一阶段,增强的ResourceManager(RM)将应用程序的状态和其它认证信息保存到一个插入式的状态存储中。RM重启时将从状态存储中重新加载这些信息,然后重新开始之前正在运行的应用程序,用户不需要重新提交应用程序。第二阶段,重启时通过从NodeManagers读取容器的状态和从ApplicationMasters读取容器的请求,集中重构RM的运行状态。与第一阶段不同的是,在第二阶段中,之前正在运行的应用程序将不会在RM重启后被杀死,所以应用程序不会因为RM中断而丢失工作。在Hadoop-2.4.0版本中实现了RM重启的第一阶段(第二阶段还未实现)。
由于目前的版本中只实现了RM重启的第一阶段,因此只能对该阶段进行学习。通过上面的综述可知,RM在客户端提交应用时,将应用程序的元数据(如ApplicationSubmissionContext)保存到插入式的状态存储中,RM还保存应用程序的最终状态,如完成状态(失败, 被杀死, 执行成功),以及应用完成时的诊断。除此之外,RM还将在安全的环境中保存认证信息如安全密钥,令牌等。RM 任何时候关闭后,只要要求的信息(比如应用程序的元数据和运行在安全环境中的认证信息等)在状态存储中可用,在RM重启时,就可以从状态存储中获取应用程序的元数据然后重新提交应用。如果在RM关闭之前应用程序已经完成,不论是失败、被杀死还是执行成功,在RM重启后都不会再重新提交。
NodeManagers和客户端在RM关闭期间将保持对RM的轮询,直到RM启动。当启动后,RM将通过心跳机制向正在与其会话的NodeManager和ApplicationMasters发送同步指令。目前NodeManager和ApplicationMaster处理该指令的方式为:NodeManager将杀死它管理的所有容器然后向RM重新注册,对于RM来说,这些重新注册的NodeManager与新加入的NodeManager相似。ApplicationMasters在接收到RM的同步指令后,将会关闭。在RM重启后,从状态存储中加载应用元数据和认证信息并放入内存后,RM将为每个还未完成的应用创建新的尝试。正如之前描述的,此种方式下之前正在运行的应用程序的工作将会丢失,因为它们已经被RM在重启后使用同步指令杀死了。
在学习了RM重启的特性和机制后,接下来就是如何启用RM重启的特性,主要涉及了yarn-site.xml中的几个配置参数,如下:
当使用FileSystemRMStateStore做为状态存储时,还需要配置下面的参数:
当使用ZKRMStateStore做为状态存储时,需要配置下面这些参数:
Hadoop-2.4.1学习之ResourceManager重启
标签:hadoop-1.2.1 resourcemanager zookeeper 状态存储 applicationmaster
原文地址:http://blog.csdn.net/skywalker_only/article/details/41545735