YARN
YARN
YARN 的目标是解决 MapReduce 的缺陷。
MapReduce 的缺陷(Hadoop 1.x)
- 身兼两职:计算框架 + 资源管理框架
- JobTracker
- 既做资源管理,又做任务调度
- 任务太重,开销过大
- 存在单点故障
- 资源描述模型过于简单,资源利用率较低
- 仅把 Task 数量看作资源,没有考虑 CPU 和内存
- 强制把资源分成 Map Task Slot 和 Reduce Task Slot
- 扩展性较差,集群规模上限 4K
- 源码难于理解,升级维护困难
YARN 简介
YARN(Yet Another Resource Negotiator,另一种资源管理器)是一个分布式通用资源管理系统。
设计目标:聚焦资源管理、通用(适用各种计算框架)、高可用、高扩展。
YARN 系统架构
- 主从结构(master/slave)
- 将 JobTracker 的资源管理、任务调度功能分离
- 三种角色:
- ResourceManager(Master) - 集群资源的统一管理和分配
- NodeManager(Slave) - 管理节点资源,以及容器的生命周期
- ApplicationMaster(新角色) - 管理应用程序实例,包括任务调度和资源申请
ResourceManager(RM)
主要功能
- 统一管理集群的所有资源
- 将资源按照一定策略分配给各个应用(ApplicationMaster)
- 接收 NodeManager 的资源上报信息
核心组件
- 用户交互服务(User Service)
- NodeManager 管理
- ApplicationMaster 管理
- Application 管理
- 安全管理
- 资源管理
NodeManager(NM)
主要功能
- 管理单个节点的资源
- 向 ResourceManager 汇报节点资源使用情况
- 管理 Container 的生命周期
核心组件
- NodeStatusUpdater
- ContainerManager
- ContainerExecutor
- NodeHealthCheckerService
- Security
- WebServer
ApplicationMaster(AM)
主要功能
- 管理应用程序实例
- 向 ResourceManager 申请任务执行所需的资源
- 任务调度和监管
实现方式
- 需要为每个应用开发一个 AM 组件
- YARN 提供 MapReduce 的 ApplicationMaster 实现
- 采用基于事件驱动的异步编程模型,由中央事件调度器统一管理所有事件
- 每种组件都是一种事件处理器,在中央事件调度器中注册
Container
- 概念:Container 封装了节点上进程的相关资源,是 YARN 中资源的抽象
- 分类:运行 ApplicationMaster 的 Container 、运行应用任务的 Container
YARN 高可用
ResourceManager 高可用
- 1 个 Active RM、多个 Standby RM
- 宕机后自动实现主备切换
- ZooKeeper 的核心作用
- Active 节点选举
- 恢复 Active RM 的原有状态信息
- 重启 AM,杀死所有运行中的 Container
- 切换方式:手动、自动
YARN 资源调度策略
FIFO Scheduler(先进先出调度器)
调度策略
将所有任务放入一个队列,先进队列的先获得资源,排在后面的任务只有等待
缺点
- 资源利用率低,无法交叉运行任务
- 灵活性差,如:紧急任务无法插队,耗时长的任务拖慢耗时短的任务
Capacity Scheduler(容量调度器)
核心思想 - 提前做预算,在预算指导下分享集群资源。
调度策略
- 集群资源由多个队列分享
- 每个队列都要预设资源分配的比例(提前做预算)
- 空闲资源优先分配给“实际资源/预算资源”比值最低的队列
- 队列内部采用 FIFO 调度策略
特点
- 层次化的队列设计:子队列可使用父队列资源
- 容量保证:每个队列都要预设资源占比,防止资源独占
- 弹性分配:空闲资源可以分配给任何队列,当多个队列争用时,会按比例进行平衡
- 支持动态管理:可以动态调整队列的容量、权限等参数,也可动态增加、暂停队列
- 访问控制:用户只能向自己的队列中提交任务,不能访问其他队列
- 多租户:多用户共享集群资源
Fair Scheduler(公平调度器)
调度策略
- 多队列公平共享集群资源
- 通过平分的方式,动态分配资源,无需预先设定资源分配比例
- 队列内部可配置调度策略:FIFO、Fair(默认)
资源抢占
- 终止其他队列的任务,使其让出所占资源,然后将资源分配给占用资源量少于最小资源量限制的队列
队列权重
- 当队列中有任务等待,并且集群中有空闲资源时,每个队列可以根据权重获得不同比例的空闲资源