这是我参与「第四届青训营 」 笔记创作活动的第13天
2. 核心模块
Resource Manager
负责集群所有资源的统一管理和分配,接收各个节点汇报信息,并且按照一定策略分配给各个任务。负责对各NM上的资源进行统一管理和调度,将AM分配空闲的Container运行并监控其运行状态。对AM申请的资源请求分配相应的空闲Container。主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager)。
状态机管理
如果一个对象由若干个状态以及触发这些状态发生转移的事件构成,它将被抽象成一个状态机
- RMApp:维护了一个应用程序相关的生命周期,包括Application生命周期,一次进行尝试的生命周期;一个RMApp对应多个RMAppAttempt。
- RMAppAttempt:维护每次运行尝试的生命周期,维护了进度,运行的机器信息,起始时间,URL等信息。
- RMContainer:维护了分配出去的各个资源的使用状态。维护了存活contianer信息,比如说containerID、ApplicationAttemptId、state、reserved等信息。
- RMNode:维护了一个NodeManager的生命周期,包括NM的机器名,地址,端口,状态等信息
调度器分析
调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位是Container,从而限定每个任务使用的资源量。Yarn中给应用分配资源的就是Scheduler,Yarn提供了多种调度器和可配置的策略供我们选择。
-
任务、资源组织,任务按照队列进行组织,节点按照Label进行组织。
-
调度流程
- AM与RM心跳:记录资源请求
- 触发时机:节点心跳
- 找Label:获取所有队列
- 找队列:最饥饿的队列优先
- 找任务:优先级高的任务优先
- 找资源请求:优先级高的请求优先
-
典型调度器
Node Manager
节点代理,从AM接受命令并执行,通过心跳方式向RM汇报节点状态并且领取命令。
NM是YARN中单个节点上的代理,它管理Hadoop集群中单个计算节点,功能包括与ResourceManger保持通信、管理Container的生命周期、监控每个Container的资源使用(内存、CPU等)情况、追踪节点健康状况、管理日志和不同应用程序用到的附属服务。
状态机管理
- Application:维护的信息是ResourceManager端Application信息的子集(生命周期一致),这有利于对一个节点上的同一个Application的所有Container进行统一管理。
- Container:维护每个Container的运行过程
- LocalizedResource:Application所需的资源(比如文本文件、JAR包、归档文件等)需要从HDFS上下载,维护和跟踪每个资源的下载过程。
节点健康检测机制
通过该机制,NodeManager可时刻掌握自己的健康状况,并及时汇报给ResourceManager。而ResourceManager则根据每个NodeManager的健康状况适当调整分配的任务数目。
作用: 帮助及时发现存在问题的NodeManager,避免不必要的任务分配,也可以用于动态升级
实现: 1. 自定义shell脚本 2. 判断磁盘好坏
3. 重要机制
公平性
Fair Share调度策略
why:保障公平的前提下实现队列间资源共享,提高资源利用率,缓解繁忙队列压力;
what:队列配置 minShare 和 maxShare,当队列空闲时按照一定策略将资源分配给其他活跃队列;
类型:1. Steady Fair Share 2. Instantaneous Fair Share
DRF调度策略
why:在保证公平性的前提下进行资源降维,以达到更好的分配效果;
what:DRF 是最大最小公平算法在多维资源上的具体实现;旨在使不同用户的“主分享量”最大化的保持公平;
最大最小公平算法:最大化最小资源需求的满足度
- 资源按照需求递增的顺序进行分配;
- 用户获取的资源不超过自身需求;
- 对未满足的用户,等价分享剩余资源;
高性能
性能瓶颈影响资源分配
状态机管理
状态四元组:转换前状态,转换后状态、事件和回调函数。三种状态转换的方式
事件处理模型
YARN 采用了基于事件驱动的并发模型,具有很强的并发性可提高系统性能。
高可用
RM高可用
- 热备节点
- 基于共享存储的 HA 解决方案
- 切主模式,手动/自动
NM高可用
- 相关信息存储至 leveldb 数据库;
- NM 重启时加载 yarn-nm-recovery 下的 leveldb 数据库;
参考
Yarn中RMApp、RMAppAttempt、RMContainer和RMNode状态机及其状态转移
Hadoop - YARN NodeManager 剖析、NodeManger内部架构、分布式缓存、目录结构、状态机管理、Container 生命周期剖、资源隔离