Yarn各组件之间的交互
yarn基本思想
Apache Yarn (Yet Another Resource Negotiator)是hadoop的集群资源管理系统
yarn 运行机制
为了在yarn上运行一个应用
- 客户端联系Resource Manager 要求它运行一个application master进程
- resource manager 找到一个能够在容量中启动application master 的node manager
- application master 一旦运行起来后能做些什么都依赖应用本身 4.可能在所处的Container中简单地运行一个计算,并将结果返回客户端;或者是向Resource Manager 请求更多容量,以用于一个分布式运算。
yarn本身不会为应用的各部分彼此间的通信提供任何手段
ResourceManager 资源管理 技术总监
- 一个集群只有一个,全局资源管理器
- 负责启动客户端提交的Application
- 监控Node Manager,汇总上的的资源
- 根据请求分配资源
NodeManager 小组长
- 每个从节点一个
- 监管自己所属节点的资源
- 监控资源使用情况并向Resource manager 汇报
让ApplicationMaster负责 任务调度 项目经理
- 每个作业启动一个
- 根据作业切分任务tasks
- 向Resource Manager申请资源
- 与Node Manager协作,将分配申请到的资源给内部任务tasks
- 监控tasks运行情况, 重启失败任务
yarn计算资源抽象
在yarn中,计算资源被抽象为Container。
每个Container描述
- 可以使用的Cpu资源和内存资源
- 执行命令
- 环境变量
- 外部资源
如何获得运行各个任务的Container
- 由ApplicationMaster 向 ResourceManager申请
- ApplicatinoMaster 本身也运行一个Container, 这个Container由ResourceManager向自身申请启动
如何启动运行
- 向Container所属的NodeManager发起运行
和组件之间的心跳信号
ApplicationMaster与ResourceManager心跳
- AM => RM
- 对Container的资源需求(cpu+memory)和优秀级
- 已用完等待回收的Container列表
- RM => AM
- 新申请到的Container
- 已完成的Container的状态
ApplicationMaster与NodeManager心跳
- AM => NM
- 发起启动的Container请求
- NM => AM
- 汇报Container
NodeManager 与 ResourceManager心跳
- NM => RM
- Node Manager上所有的Container
- RM => NM
- 已删除和等待清理的Container列表
Yarn调度器&调度算法
Yarn使用队列解决多租房中共享资源的问题。
支持三种调度器:
- FIFO
- Capacity Scheduler
- Fair Scheduler
FIFO调度器
- 所有向集群提交的作业使用一个队列
- 根据提交作业的顺序运动
- 优点:
- 简单易懂
- 可以按照作业优先级调度
- 缺点:
- 资源利用率不高
- 不允许抢占
Capacity Scheduler资源调度器
设计思想:
- 资源按照比例分配给各个队列
特点
- 计算能力保证
- 以队列为单位划分资源,每个队列保证最低资源
- 灵活性
- 当某个队列空间时,其资源可以分配给其他的队列使用
- 支持优先级
- 单个队列内部使用FIFO, 支持作业优先级调度
- 多租房
- 综合考虑多种因素防止单个作业、用户、或者队列 独占资源
- 每个队列可以配置一定比例的最低资源配置和使用上限
- 每个队列有严格的访问限制 ,只能自己队列提交任务
Capacity Scheduler资源分配算法
- 选择队列
- 从跟队列开始,使用深度优先算法找出资源占用率最低的叶子节点
- 选择作业
- 默认按照作业优先级和提交时间顺序选择
- 选择Container
- 取该作业中最高优先级的Container,如果优先级相同会选择满足本地性的Container: Node Local > Rack Local > Different Rack
Fair Scheduler 公平资源调度器
设置思想: 资源公平分配。
具有与Capacity Scheduler 相似的特点。
不同点:
- 核心策略不同
- Capacity Scheduler 优先选择资源利用率最低的队列
- Fair Scheduler考虑是公平的, 公平体现在作业对资源 分配
- 单独设置队列间资源分配方式
- FAIR 默认 used memory/ min share
- DRF 主资源公平调度
Fair Scheduler - FAIR资源分配算法
总体流程与Capacity Scheduler一致
- 选择队列
- 选择作业
- 选择Container
选择队列和作业使用公平排序算法
- 实际最小份额
- mindshare = min (资源需求量, 配置minShare)
- 是否饥饿
- isNeedy = 资源使用量 < minShare
- 资源分配比
- minShareRatio = 资源使用量/max(mindshare, 1)
- 资源使用权重比
- useToWeightRatio = 资源使用量/权重
- 权重 在配置文件中配置