ResourceManager是Hadoop资源管理器Yarn的Master,负责资源的统一管理和调度。它与Yarn中另外三个组件协同工作,共同完成应用程序在Yarn上的资源管理与调度。通过以下这张图我们就可以看出ResourceManager在资源管理和调度中的地位和作用(ps:图片截取自董西成的《Hadoop技术内幕:深入解析YARN架构设计与实现原理》一书)。
不难看出,ResourceManager居于整体体系的正中,这也印证了它是Hadoop Yarn中Master节点。它通过不同的RPC协议与NodeManager、ApplicationMaster、Application Client一起协同工作,首先由Application Client向ResourceManager提交应用程序,并产生ApplicationMaster,然后ApplicationMaster申请向RM注册并申请资源,而RM对资源清理能够了如指掌并能够适当分配,则是由于NodeManager向ResourceManager注册并周期性汇报资源情况,这三大组件在RM的统一调度和管理下,共同完成应用程序在Yarn上的资源管理与调度。箭头中间的三个RPC协议,就是本文我将要论述的重点。
一、ResourceTracker
这是ResourceManager与NodeManager通信使用的RPC协议。基于ResourceTracker,NodeManager可完成向ResourceManager注册、周期性心跳汇报工作,并在周期性心跳汇报中领取RM下达的命令,比如重新初始化、清理 Container等。在这个过程中,NM扮演的是RPC client的角色,而RM扮演的是RPC server的角色,而这一过程是pull模型,即总是由slave节点NM主动发起,向RM注册或周期性汇报。
ResourceTracker就提供了两个方法,如下:
@Idempotent
public RegisterNodeManagerResponse registerNodeManager(
RegisterNodeManagerRequest r