文章目录
- Yarn资源调度器
- 1.1 Yarn基础架构
- 1.2 Yarn工作机制 ```面试题```
- 1.3 Yarn调度器和调度算法
- 1.3.1 容量调度器(Capacity Scheduler)
- 1.3.2 公平调度器(Fair Scheduler)
- 1.3.2.2 公平调度器队列资源分配方式与分配算法
- (1)FIFO策略
- (2)**Fair策略**
- (3) **DRF策略**
- 命令行操作Yarn
- yarn logs查看日志
- yarn applicationattempt查看尝试运行的任务
- yarn container查看容器
- yarn node查看节点状态
- yarn rmadmin更新配置
- yarn queue查看队列
- 开发者必备 核心参数
- Tool接口
Yarn资源调度器
1)如何管理集群资源?
2)如何给任务合理分配资源
Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。
1.1 Yarn基础架构
YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。
ResourceManager(RM):整个集群资源(内存、CPU等)的老大
NodeManager(NM):单个节点服务器资源老大
ApplicationMaster(AM):单个任务运行的老大
1.2 Yarn工作机制 面试题
- 当Mr程序 运行wc.jar 走入main方法中的最后一行 job.waitForCompletion 然后会创建一个YarnRunner (本地模式是LocalRunner )他会和集群说运行一个Application,
- 然后按照集群的要求将要提交的job放在指定集群路径,
- 放三样东西 切片(开启多少个MapTask) xml(按照我的配置来运行) jar(程序代码)
- 然后YR 申请运行这job的老大 也就是applicationMaster
- 然后在RM内部会产生一个任务, 然后放进任务队列当中
- NM这资源较多,就会去领取Task 任务
- 然后创建容器Contaniner(有网络资源磁盘io等等资源)在容器中启动MRAppmaster
- 然后去集群路径下读取之前提交的job的切片信息
- 然后去RM中申请MapTask的容器
- 然后又有新的NM领取任务 创建容器
- 然后用MRappMaster 发送程序启动脚本
- 计算完后 ,然后去RM中申请ReduceTask的容器
- ReduceTask 运行完 ,MR会向RM申请注销自己
这就是简单的Yarn工作机制
1.3 Yarn调度器和调度算法
Hadoop作业调度器主要有三种:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。Apache Hadoop3.1.3默认的资源调度器是Capacity Scheduler。
CDH框架默认调度器是Fair Scheduler。
1.3.1 容量调度器(Capacity Scheduler)
1、多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略。
2、容量保证:管理员可为每个队列设置资源最低保证和资源使用上限
3、灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
4、多租户:
支持多用户共享集群和多应用程序同时运行。
为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。
(容量)Capacity 分配算法
1)队列资源分配
root开始 使用深度优先算法 ,优先选择资源占有率最低的队列分配资源
2)作业资源分配
提交优先级,提交时间
3)容器资源分配
按照容器优先级 ,然后优先级相同就按照数据本地性原则:
任务和数据在同一节点-》同一机架-》不在同一节点也不在同一机架0
1.3.2 公平调度器(Fair Scheduler)
同队列在同时间尺度活得公平的资源
容量调度器相同点:
1.多队列:配置一定资源量每一个队列再FIFO先进先出
2.容量保障:管理员设置资源最低保证和资源使用上限
3.灵活性:如果一个队列中资源有剩余可以共享给有需要的队列但是如果自己又有程序需要提交,会归还
4.多租户 支持多用户共享集群,和多应用程序同时运行
为了防止一个用户独占资源对```一个用户提交所占资源进行限定`
不同点:
(1)核心调度策略不同
Capacity 优先选择资源利用率低的 谁先进来谁先执行
Fair 优先选择资源缺额比例大的(缺额:理想获取和实际获取的差距)
(2)每个队列可以单独设置资源分配方式
容量调度器:FIFO,DRF(cpu+内存)
公平调度器:FIFO,Fair,DRF(cpu+内存)
公平调度器 有个缺额问题
就是现在 队列一中已经有4个任务了 ,然后现在要加第五个任务 然而第五个任务占有的资源 远远不足自己所规划好的资源,这时就会出现缺额
然后调度器优先会给缺额大的作业分配资源
这里所指的优先 是 假如有两个都缺额,一个缺30 另一个缺20 我现在空闲出了10 我优先给缺30的
1.3.2.2 公平调度器队列资源分配方式与分配算法
(1)FIFO策略
当公平调度器采用FIFO策略进行资源分配时,那么其就等价于上面的容量调度器。
(2)Fair策略
Fair 策略(默认)是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。这意味着,如果一个队列中有两个应用程序同时运行,则每个应用程序可得到1/2的资源;如果三个应用程序同时运行,则每个应用程序可得到1/3的资源。
如果有三个队列,对资源的需要分别为20%,30%,50%。
如果采用公平调度器,调度器内部第一次计算会将资源等分为三份(33.3%)分给三个队列。第二> > 次计算会将多的资源值继续等分。直至资源分配完毕
(3) DRF策略
DRF(Dominant Resource Fairness),我们之前说的资源,都是单一标准,例如只考虑内存(也是Yarn默认的情况)。但是很多时候我们资源有很多种,例如内存,CPU,网络带宽等,这样我们很难衡量两个应用应该分配的资源比例。
那么在YARN中,我们用DRF来决定如何调度:
假设集群一共有100 CPU和10T 内存,而应用A需要(2 CPU, 300GB),应用B需要(6 CPU,100GB)。则两个应用分别需要A(2%CPU, 3%内存)和B(6%CPU, 1%内存)的资源,这就意味着A是内存主导的, B是CPU主导的,针对这种情况,我们可以选择DRF策略对不同应用进行不同资源(CPU和内存)的一个不同比例的限制。
在生产使用过程中,由于FIFO调度器不支持多队列多并发用户的性质,导致在生产使用过程中,我们不使用FIFO调度器。主要选择容量调度器与公平调度器。
命令行操作Yarn
- 列出所有Application:
yarn application -list - 根据Application状态过滤:
(所有状态:ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED FAILED、KILLED)
yarn application -list -appStates FINISHED - Kill掉Application
yarn application -kill application_1612577921195_0001
yarn logs查看日志
- 查询Application日志:
yarn logs -applicationId - 查询Container日志:
yarn logs -applicationId -containerId
yarn applicationattempt查看尝试运行的任务
- 列出所有Application尝试的列表:
yarn applicationattempt -list - 打印ApplicationAttemp状态:
yarn applicationattempt -status
yarn container查看容器
- 列出所有Container:
yarn container -list - 打印Container状态:
yarn container -status
yarn node查看节点状态
- 列出所有节点
yarn node -list -all
yarn rmadmin更新配置
- 加载队列配置
yarn rmadmin -refreshQueues
yarn queue查看队列
- 打印队列信息:
yarn queue -status
开发者必备 核心参数
Tool接口
Yarn的 Tool 接口 用来动态修改参数 ,就是 MR Driver 中第一个是输入路径 第二个输出路径 ,假如我们有第三个路径 指定调度器队列
-Dmapreduce.job.queuename=root.test