文章目录
1、Yarn基础架构
1.1 用途
- 管理资源
相当于一个分布式操作系统
MR相当于一个运用程序 - 分配资源
负责任务在哪个平台上运行更合理
1.2 组件
- Resource Manager
整个集群资源老大
处理客户端请求
监控 Node Manager 运行情况
启动和监控 Application Master 运行情况
资源分配和调度 - Node Manager
单节点资源老大
Resource Manager 发来的请求
Application Master发来的命令 - Container
容器
相当于一台小电脑
包含cpu、内存等资源 - Application Master
单任务资源老大
向Resource Manager申请资源
监控maptask和reducetask任务的运行情况
2、Yarn的工作机制(面试题)
- 在客户端上运行jar包
/home/atguigu/wc.jar
- jar包的方法驱动类,最后一行是job.waitForCompletion(true);
main{
boolean result = job.waitForCompletion(true);
}
-
如果使用yarn模式,则会创建yarn runner;如果使用本地模式,则会创建local runner
yarn模式会提交三样东西
配置:.xml、切片:.split、jar包:wc.jar -
yarn runner 会向 Resource Manager 申请运行 MR Application Master(单任务资源老大)
-
Resource Manager 会将任务的请求生成一个Task,放入队列中
-
空闲的Node Manager会领取任务
-
Node Manager会创建Container
包含CPU、磁盘资源、网络IO -
会下载之前Job提交的三样东西(配置.xml、切片.split、jar包wc.jar)
-
NodeManager上的MR Application Master会根据切片信息,开启对应数量的MapTask(相当于是MR Application Master的子任务)
-
每个MapTask同样会放在Container中运行,每个Container同样包含CPU、磁盘资源、网络IO
-
MR Application Master启动MapTask任务,开始跑MapTask
-
MR Application Master申请运行ReduceTask,先申请容器,后开始跑ReduceTask
-
MapTask、ReduceTask任务完成后,释放Container资源
3、作业提交全过程
HDFS
- 先有数据存储在集群上
- NameNode 记录数据的元信息
- Secondary NameNode 备份 NameNode ,恢复 NameNode 一部分工作
- DataNode 处理数据实实在在的存储
YARN
- 客户端向服务器提交任务后,Resource Manager 会找一个节点,开启 Container,把 Application Master 放在节点上
- Application Master 会根据任务需要向 Resource Manager 申请资源
- Resource Manager 确认节点是否有足够的资源,有的话,开启对应的资源
MapReduce
- 开始 Map Task、Reduce Task
- Reduce阶段,将 MapTask 后的结果汇总,写入HDFS
4、Yarn调度器和调度算法
4.1 调度器
概念
管理任务执行先后和资源分配
位置
位于Yarn的工作机制第五步
ResourceManager 会将任务的请求生成一个Task,放入任务队列中,由任务队列来管理多个客户端提交上来的任务
分类
1. 先进先出(FIFO)
2. 容量调度器 (Capacity Scheduler)
3. 公平调度器 (Fair Scheduler)
默认
Apache Hadoop3.1.3 默认的资源调度器是容量调度器 (Capacity Scheduler)
CDH 默认的资源调度器是公平调度器 (Fair Scheduler)
4.2 先进先出(FIFO)
- 单队列,按照到达时间,先到的任务先处理
- 无法支持多队列,所以生产环境不会使用
4.3 容量调度器 (Capacity Scheduler)
4.3.1 特点
-
多队列
- 每个队列可以配置一定的资源
- 每个队列本质上都是 先进先出(FIFO)队列
- 优先满足靠前的任务(如:单队列有10G,A任务2G,B任务8G,C任务2G,则会跑A和B任务,等资源释放后再跑C任务) -
容量保证
- 每个队列都有自己最低资源和最高资源上限,当资源不足时,尽可能保证每个队列都能满足最低的资源需求(指所有队列都能把任务跑起来) -
灵活性
- 本身队列资源有剩余,可以借给其他队列使用
- 如果自身需要资源时,其他队列会把资源优先归还 -
多租户
- 为了防止某些用户独占队列中的资源,调度器会对每个用户提交的资源总量做限制
- 即使同队列其他用户有空闲资源也不能使用
- 防止某些用户跑了一个递归死循环
4.3.2 分配优先级算法
- 队列资源分配
- 优先选择资源占用率最低的队列分配
- 例如同时开启队列A、队列B、队列C,优先执行任务A
- 作业资源分配
- 可以给作业设置优先级,如果没有优先级,按照时间先后顺序执行
- 容器资源分配
- 可以给容器设置优先级,如果没有优先级,按照本地性原则
- 优先数据和任务在同一个节点
- 其次数据和任务在同一个机架
- 最后数据和任务在不同机架、节点
- 可以给容器设置优先级,如果没有优先级,按照本地性原则
- 核心调度策略:
- 优先执行资源占用率低的任务
4.4 公平调度器 (Fair Scheduler)
4.4.1 特点
Fair :当一个队列中有N个任务在跑时,每个任务都能获得1/N的资源
4.4.1.1 与容量调度器 (Capacity Scheduler)特点相同之处
-
多队列
- 每个队列可以配置一定的资源 -
容量保证
- 每个队列都有自己最低资源和最高资源上限,当资源不足时,尽可能保证每个队列都能满足最低的资源需求(指所有队列都能把任务跑起来) -
灵活性
- 本身队列资源有剩余,可以借给其他队列使用
- 如果自身需要资源时,其他队列会把资源优先归还 -
多租户
- 为了防止某些用户独占队列中的资源,调度器会对每个用户提交的资源总量做限制
- 即使同队列其他用户有空闲资源也不能使用
- 防止某些用户跑了一个递归死循环
4.4.1.2 与容量调度器 (Capacity Scheduler) 特点区别
- 核心调度策略不同
- 容量调度器:优先执行资源占用率低的任务
- 公平调度器:优先执行资源缺额较大的任务 - 资源分配方式不同
- 容量调度器:FIFO、DRF(内存+CPU配比)
- 公平调度器:FIFO、DRF(内存+CPU配比)、FAIR
4.4.2 分配优先级算法
-
队列资源分配
- 第一次算,先按照公平原则,给每个队列均分资源
- 第二次算,将空闲资源拿出来,分给含有缺额的队列 -
作业资源分配
- 如果没有权重,先均分,再把差额再次均分
- 如果设置了权重,一直按照权重进行分配