YARN
MapReduce(Hadoop 1.x)的设计缺陷
身兼两职:计算框架+资源管理框架 JobTracker+TaskTracker(1:N)
- JobTracker
- 既做资源管理,又做任务调度
- 任务太重,开销过大
- 存在单点故障
- 资源描述模型过于简单,资源利用率较低
- 仅把Task数量看作资源,没有考虑CPU和内存
- 强制把资源分为Map Task Slot和Reduce Task Slot,无法兼容其他的框架,通用性差
- 扩展性较差,集群规模上限4K
YARN所处的位置
架构
工作机制
资源调度策略
- FIFO调度器
--- 调度策略:
单队列,将所有任务放入一个队列,先进队列的先获得资源,排在后面的任务只有等待
--- 缺陷:
资源利用率低,无法交叉运行任务
灵活性差,比如紧急任务无法插队,耗时长的任务拖慢耗时短的任务
- 容量调度器
--- 核心思想:提前做预算,在预算指导下分享集群资源
--- 调度策略
集群资源由多个队列分享
每个队列都要预设资源分配的比例(预算)
空闲资源优先分配给“实际资源/预算资源”比例最低的队列
队列内部采用FIFO调度策略
--- 特点
层次化的队列设计:子队列可使用父队列资源
容量保证:每个队列都要预设资源占比,防止资源独占
弹性分配:空闲资源可以分配给任何队列,当多个队列争用时,会按比例进行平衡
支持动态管理:可以调整队列的容量,权限等参数,也可动态增加,暂停队列
访问控制:用户只能向自己的队列中提交任务,不能访问其他的队列
多租户:多用户共享集群资源
--- 配置:
全局配置:在yarn-site.xml中配置
yarn.resourcemanager.scheduler.class------org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
自定义配置:在capacity-scheduler.xml中配置
- 公平调度器
--- 调度策略
多队列公平共享集群资源
通过平分的方式,动态分配资源,无需预先设定资源分配比例
队列内部可配置调度策略:FIFO,Fair(默认)
--- 资源抢占
终止其他队列的任务,使其让出所占的资源,然后将资源分配给占用资源量少于最小资源量限制的队列
--- 队列权重
当队列中有任务等待,并且集群中有空闲资源时,每个队列可以根据权重获得不同比列的空闲资源
--- 配置:yarn-size.xml和fair-scheduler.xml