ResourceManager剖析

一:概述

1.1 ResourceManager基本职能

  1. ResourceManager需通过两个RPC协议与NodeManager和ApplicationMaster交互,具体如下:
    • ResourceTracker:NodeManager通过该RPC协议向ResourceManager注册、汇报节点健康状况和Container运行状态,并领取ResourceManager下达的命令,这些命令包括重新初始化、清理Container等,在该RPC协议中,NodeManager与ResourceManager之间采用了“pull模型”,NodeManager总是周期性地主动向ResourceManager发起请求,并通过心跳应答领取下达给自己得命令
    • ApplicationMasterProtocol:应用程序的ApplicationMaster通过该RPC协议向ResourceManager注册、申请资源和释放资源
    • ApplicationClientProtocol:应用程序的客户端通过该RPC协议向ResourceManager提交应用程序、查询应用程序状态和控制应用程序(比如杀死应用程序和修改应用程序优先级)等
    • ContainerManagementProtocol:ApplicationMaster通过该RPC协议要求NodeManager启动、停止Container和获得Containers的状态
  2. 概括起来,ResourceManager主要完成以下几个功能:
    • 与客户端交互,处理来自客户端的请求
    • 启动和管理ApplicationMaster,并在它运行失败时重新启动它;资源管理和调度,接收来自ApplicationMaster的资源申请请求,并为之分配资源
    • 管理NodeManager,接收来自NodeManager的资源汇报信息,并向NodeManager下达管理指令(比如杀死Container等)

1.2 ResourceManager内部架构

  1. ResourceM主要由以下几个部分组成
    • 用户交互模块:ResourceManager分别针对普通用户、管理员和Web提供了三种对外服务,具体实现分别对应ClientRMService、AdminService和WebApp
      • ClientRMService:ClientRMService是为普通用户提供的服务,它处理来自客户端的各种RPC请求,比如提交应用程序、终止应用程序、获取应用程序状态
      • AdminService:ResourceManager为管理员提供了一套独立的服务接口,以防止大量普通用户请求使管理员发送的管理命令饿死,管理员可通过这些接口管理集群,比如动态更新节点列表、更新ACL列表、更新队列信息等
      • WebApp:为了更加友好地展示集群资源使用情况和应用程序运行状态等信息。YARN对外提供了一个Web界面
    • NM管理模块
      • NMLivelineMonitor:监控NM是否活着,如果一个NodeManager在一定时间(默认为10min)未汇报心跳信息,则认为它死掉了,需要将其从集群中移除
      • NodesListManager:维护正常节点和异常节点列表,管理exclude(类似于黑名单)和include(类似于白名单)节点列表,这两个列表均是在配置文件中设置的,可以动态加载
      • ResourceTrackerService:处理来自NodeManager的请求,主要包括注册和心跳两种,其中,注册是NodeManager启动时发生的行为,请求包中包含节点的ID、可用的资源上线等信息;而心跳是周期性行为,包括各个Container运行状态、运行的各个Application列表、节点健康状况(可通过一个脚本设置)等信息,作为请求的应答,ResourceTrackerService可为NodeManager返回待释放的Container列表、Application列表等信息
    • AM管理模块
      • AMLivelinessMonitor:监控AM是否活着,如果一个ApplicationMaster在一定时间(默认为10min)内未汇报心跳信息,则认为它死掉了,它上面所有正在运行的Container将被置为失败状态,而AM本身被重新分配到另外一个节点上(用户可指定每个ApplicationMaster的尝试次数,默认是2)执行
      • ApplicationMasterLauncher:与某个NodeManager通信,要求它为某个应用程序启动ApplicationMaster
      • ApplicationMasterService(AMS):处理来自ApplicationMaster的请求,主要包括注册和心跳两种请求,其中,注册是ApplicationMaster启动时发生的行为,注册请求包中包含ApplicationMaster启动节点;对外的RPC端口号和tracking URL等信息;而心跳则是周期性行为,汇报信息包含所需资源描述、待释放的Container列表、黑名单列表等,而AMS则为之返回新分配的Container、失败的Container、待抢占的Container列表等信息
    • Application管理模块
      • ApplicationACLsManager:管理应用程序访问权限,包含两部分权限:查看权限和修改权限。查看权限主要用于查看应用程序基本信息,而修改权限则主要用于修改应用程序优先级、杀死应用程序等
      • RMAppManager:管理应用程序的启动和关闭
      • ContainerAllocationExpirer:当AM收到RM新分配的一个Container后,必须在一定时间(默认为10min)内在对应的NM上启动该Container,否则RM将强制回收该Container,而一个已经分配的Container是否该被回收则是由ContainerAllocationExpirer决定和执行的
    • 状态机管理模块
      • RMApp:RMApp维护了一个应用程序(Application)的整个运行周期,包括从启动到运行结束整个过程。由于一个Application的生命周期可能会启动多个Application运行实例(Application Attempt),因此可认为,RMApp维护的是同一个Application启动的所有实例的生命周期
      • RMAppAttempt:一个应用程序可能启动多个实例,即一个实例运行失败后,可能再次启动一个重新运行,而每次启动称为一次运行尝试(或者“运行实例”),用“RMAppAttempt”描述,RMAppAttempt维护了一次运行尝试的整个生ing周期
      • RMContainer:RMContainer维护了一个Container的运行周期,包括从创建到运行结束整个过程。目前YARN尚不支持Container重用,一个Container用完后会立刻释放,将来可能会增加Container重用机制
      • RMNode:RMNode维护了一个NodeManager的生命周期,包括启动到运行结束整个过程
    • 安全管理模块:ResourceManager自带了非常全面的权限管理机制
    • 资源分配模块:该模块主要涉及一个组件——ResourceScheduler。ResourceScheduler是资源调度器,它按照一定的约束条件(比如队列容量限制等)将集群中的资源分配给各个应用程序,当前主要考虑内存和CPU资源。ResourceScheduler是一个插拔式模块,YARN自带了一个批处理资源调度器——FIFO和两个多用户调度器——Fair Scheduler和Capacity Scheduler

参考:《Hadoop 技术内幕:深入解析 YARN 架构设计与实现原理》


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏恰童鞋骚年

Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我...

2501
来自专栏分布式系统和大数据处理

安装和配置Hadoop(单节点)

Hadoop生态圈仍处于欣欣向荣的发展态势,不断涌现新的技术和名词。Hadoop的HDFS、YARN、MapReduce仍是最基础的部分,这篇文章记录了如何一步...

7773
来自专栏祝威廉

使用Spark SQL构建批处理程序

在批处理模式下,所有的数据源和输出都各自有一个固定的模块(使用了Spark的Datasource API),然后对模块做配置即可,无需使用不同的模块。

1163
来自专栏静默虚空的博客

Yarn 入门

[package]会被加入到package.json文件中的依赖列表,同时yarn.lock也会被更新。

1213
来自专栏机器学习算法工程师

Spark资源调优

Spark 作者:章华燕 编辑:龚 赛 概述 1 在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可...

3647
来自专栏Hadoop实操

如何在非Kerberos环境下对CDH进行扩容

Hadoop集群其中一个优点就是可伸缩性(横向扩展),通过增加计算节点使服务容量产生线性增长的能力。可伸缩的应用程序的主要特点是:只需要增加资源,而不需要对应用...

4794
来自专栏linux驱动个人学习

DMA与cache一致性的问题

Cache和DMA本身似乎是两个毫不相关的事物。Cache被用作CPU针对内存的缓存利用程序的空间局部性和时间局部性原理,达到较高的命中率,从而避免CPU每次都...

1452
来自专栏个人分享

Flink on Yarn运行机制

从图中可以看出,Yarn的客户端需要获取hadoop的配置信息,连接Yarn的ResourceManager。所以要有设置有 YARN_CONF_DIR或者HA...

1.6K2
来自专栏Spark学习技巧

Spark调优系列之硬件要求

估计所有的spark开发者都很关心spark的硬件要求。恰当的硬件配置需要具体情况具体分析,浪尖在这里给出以下建议。 一,存储系统 因为因为大多数Spark工作...

2438
来自专栏数据派THU

独家 | 一文读懂Hadoop(二)HDFS(上)

随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识。2017年年初apache发...

6219

扫码关注云+社区

领取腾讯云代金券