YARN秒懂
- YARN定义
- 基础架构
- 工作流程
- 资源调度器
-
- [FIFO Scheduler](#FIFO Scheduler)
- [Capacity Scheduler](#Capacity Scheduler)
- [Fair Scheduler](#Fair Scheduler)
- 常用命令
YARN定义
YARN(Yet Another Resource Negotiator)是Hadoop的一个框架,它负责在Hadoop集群中调度工作,管理资源,并为用户提供运行各种类型的应用程序的环境
基础架构
ResourceManager
- 处理客户端请求
- 监控NodeManager
- 启动或监控ApplicationMater
- 资源的分配与调度
NodeManager
- 管理单个节点上的资源
- 处理来自ResourceManager的命令
- 处理来自ApplicationMaster的命令
ApplicationMaster
- 为应用程序申请资源并分配给内部的任务
- 任务的监控与容错
Container
- container是YARN中的资源抽象,封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等
工作流程
-
作业提交1-3
-
作业初始化4-7
-
任务分配8-9
-
任务运行10-13
-
进度和状态更新
YARN中的任务将其进度和状态返回给应用管理器, 客户端每秒向应用管理器请求进度更新, 展示给用户
-
作业完成
客户端除了向应用管理器请求作业进度外, 每5分钟会来检查作业是否完成 作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查
资源调度器
FIFO Scheduler
First In First Out,单队列,根据作业的提交顺序执行任务
Capacity Scheduler
容量调度器,Apache hadoop3.2.3默认调度器,是Yahoo开发的多用户调度器
容量调度器特点
- 多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略
- 容量保证:管理员可为每个队列设置最低资源保证和资源使用上限
- 灵活性:如果一个队列中资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的任务提交,则其他队列借调的资源会归还给该队列
- 多租户:支持多用户共享集群和多应用程序同时进行,为防止同一个用户的作业独占资源,调度器会对同一个用户提交的作业所占资源进行限定
容量调度器资源分配算法
-
队列资源分配
从root用户开始,使用深度优先算法,优先选择资源占用率最低的队列分配资源
-
作业资源分配
默认按照提交作业的优先级和提交时间顺序分配资源
-
容器资源分配
按照容器的优先级分配资源; 如果优先级相同,按照数据本地原则:(同HDFS机架感知策略) 1)任务和数据在同一节点 2)任务和数据在同一机架 3)任务和数据不在同一节点也不在同一机架
Fair Scheduler
公平调度器是Facebook开发的多用户调度器
公平调度器的特点
同队列所有任务共享资源,在时间尺度上获得公平的资源
与容量调度器的相同点
- 多队列:支持多队列作业,
- 容量保证:管理员可为每个队列设置最低资源保证和资源使用上限
- 灵活性:有剩余的资源可以暂时共享给那些需要资源的队列
- 多租户:支持多用户共享集群和多应用程序同时进行
与容量调度器的不同点
-
核心调度策略不同
容量调度器:优先选择资源利用率低的队列 公平调度器:优先选择对资源缺额比例大的
-
每个队列可以单独设置资源分配方式
容量调度器:FIFO、DRF 公平调度器:FIFO、FAIR、DRF
缺额
公平调度器的设计目标是:在时间尺度上,所有作业获得公平的资源。某一时刻一个作业应获资源和实际获取资源的差距叫"缺额"
公平调度器列队资源分配方式
-
FIFO策略
公平调度器每个队列资源分配策略为FIFO时,此时公平调度器相当于容量调度器
-
FAIR策略
Fair策略(默认)是一种基本最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源,无论有几个应用程序,平均分配当前的资源 资源分配流程和容量调度器一致: 1)选择队列 2)选择作业 3)选择容器 每一步都按照公平策略分配资源 公平策略 实际最小份额: mindshare = Min(资源需求量,配置的最小资源) 是否饥饿: isNeedy = 资源使用量 < mindshare(实际最小份额) 资源分配比: minShareRatio = 资源使用量 / Max(mindshare, 1) 资源使用权重比:useToWeigthRatio = 资源使用量 / 权重
-
DRF策略
DRF(Dominant Resource Fairness),之前说的资源都是单一标准,比如只考虑内存(Yarn默认),但很多时候我们资源有很多种, 例如内存、CPU等,DRF策略是对不同应用进行不同资源(内存和CPU)的合理比例分配
常用命令
8088端口查看的信息
- 查看任务列表
bash
yarn application -list
- 查看任务状态
bash
yarn application -status <applicationid>
- 根据任务状态查询列表
bash
yarn application -list -appStates <status>
<status>如下
- 查看任务log
bash
yarn logs -applicationId <applicationid>
- 查看节点状态
bash
yarn node -list -all
- 查看队列状态
bash
yarn queue -status default