Hadoop yarn协议汇总

来源:互联网 发布:三国乱世神石强化数据 编辑:程序博客网 时间:2024/06/05 08:07

YARN的组成

yarn主要由ResourceManager,NodeManager,ApplicationMaster和Container等几个组件组成。

ResourceManager(RM)

RM是全局资源管理器,负责整个系统的资源管理和分配。

主要由两个组件组成:调度器和应用 程序管理器(ASM)

调度器

调度器根据容量,队列等限制条件,将系统中的资源分配给各个正在运行的应用程序

不负责具体应用程序的相关工作,比如监控或跟踪状态

不负责重新启动失败任务

资源分配单位用“资源容器”resource Container表示

Container是一个动态资源分配单位,它将内存,CPU,磁盘,网络等资源封装在一起,从而限定每个任务的资源量

调度器是一个可插拔的组件,用户可以自行设计

YARN提供了多种直接可用的调度器,比如fair Scheduler和Capacity Scheduler等。

应用程序管理器

负责管理整个系统中所有应用程序

ApplicationMaster(AM)

用户提交的每个应用程序均包含一个AM

AM的主要功能

与RM调度器协商以获取资源(用Container表示)

将得到的任务进一步分配给内部的任务

与NM通信以自动/停止任务

监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务

当前YARN自带了两个AM实现

一个用于演示AM编写方法的实例程序distributedshell

一个用于Mapreduce程序---MRAppMaster

其他的计算框架对应的AM正在开发中,比如spark等。

Nodemanager(NM)和Container

NM是每个节点上的资源和任务管理器

定时向RM汇报本节点上的资源使用情况和各个Container的运行状态

接收并处理来自AM的Container启动/停止等各种要求

Container是YARN中的资源抽象,它封装了某个节点上的多维度资源

YARN会为每个任务分配一个Container,且改任务只能使用该Container中描述的资源

Container不同于MRv1的slot,它是一个动态资源划分单位,是根据应用程序的需求动态产生的

yarn的通信协议



  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上的资源管理与调度.
  • ApplicationClientProtocol(Client -> RM)
协议方法功能描述getNewApplication获取一个新的ApplicationId,例如返回的ApplicationId为application_1418024756741submitApplication提交一个Application到RMforceKillApplication终止一个已经提交的ApplicationgetApplicationReport获取一个Application的状态报告信息ApplicationReport,包括用户、队列、名称、AM所在节点、AM的RPC端口、跟踪URL、AM状态、诊断信息(如果出错的话)、启动时间、提交Application的Client(如果启用安全策略)getClusterMetrics获取YARN集群信息,如节点数量getApplications获取Application状态报告信息,和getApplicationReport类似,只不过增加了过滤器功能getClusterNodes获取集群内所有节点的状态报告信息getQueueInfo获取队列信息getQueueUserAcls获取当前用户的队列ACL信息getDelegationToken获取访问令牌信息,用于Container与RM端服务交互renewDelegationToken更新已存在的访问令牌信息cancelDelegationToken取消访问令牌moveApplicationAcrossQueues将Application移动到另一个队列中getApplicationAttemptReport获取Application Attempt状态报告信息ApplicationAttemptReportgetApplicationAttemptReport获取Application Attempt状态报告信息,和getApplicationAttemptReport类似,只不过增加了过滤器功能getContainerReport根据ContainerId获取Container状态报告信息ContainerReport,例如Container名称为container_e17_1410901177871_0001_01_000005,各个段的含义:container_e<epoch>_<clusterTimestamp>_<appId>_<attemptId>_<containerId>getContainers根据ApplicationAttemptId获取一个Application Attempt所使用的Container的状态报告信息,例如Container名称为container_1410901177871_0001_01_000005submitReservation预定资源,以备在特殊情况下能够从集群获取到资源来运行程序,例如预留出资源供AM启动updateReservation更新预定资源deleteReservation删除预定getNodeToLabels获取节点对应的Label集合getClusterNodeLabels获取集群中所有节点的Label
  • ResourceTracker(NM -> RM)
协议方法功能描述registerNodeManagerNM向RM注册nodeHeartbeatNM向RM发送心跳状态报告
  • ApplicationMasterProtocol(AM -> RM)
协议方法功能描述registerApplicationMasterAM向RM注册finishApplicationMasterAM通知RM已经完成(成功/失败)allocateAM向RM申请资源
  • ContainerManagementProtocol(AM -> NM)
协议方法功能描述startContainersAM向NM请求启动ContainerstopContainersAM向NM请求停止ContainergetContainerStatusesAM向NM请求查询当前Container的状态
  • ResourceManagerAdministrationProtocol(RM Admin -> RM)
协议方法功能描述getGroupsForUser获取用户所在用户组,该协议继承自GetUserMappingsProtocolrefreshQueues刷新队列配置refreshNodes刷新节点配置refreshSuperUserGroupsConfiguration刷新超级用户组配置refreshUserToGroupsMappings刷新用户->用户组映射信息refreshAdminAcls刷新Admin的ACL信息refreshServiceAcls刷新服务级别信息(SLA)updateNodeResource更新在RM端维护的RMNode资源信息addToClusterNodeLabels向集群中节点添加LabelremoveFromClusterNodeLabels移除集群中节点LabelreplaceLabelsOnNode替换集群中节点Label
  • HAServiceProtocol(Active RM HA Framework Standby RM)
协议方法功能描述monitorHealthHA Framework监控服务的健康状态transitionToActive使RM转移到Active状态transitionToStandby使RM转移到Standby状态getServiceStatus获取服务状态信息
0 0