[ hadoop] Yarn架构

Yarn概述

Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。

基础架构

YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。

image-20220315190758241

ResourceManager:整个集群资源的老大

NodeManager:单节点资源的老大

ApplicationMaster:单个作业任务的老大

Container:容器

Yarn工作机制

以下流程以2个切片,两个分区为例(4大步,14小步):

image-20220315202931579

  1. 客户端所在节点执行Jar包中的程序(MR程序),执行驱动类中main方法末尾的waitForCompletion()底层创建YarnRunner,正式运行Yarn;
  2. YarnRunner向ResourceManager申请一个Application
  3. RM返回给YarnRunner该job资源的提交路径和作业id
  4. 驱动类中的程序底层job.submit()将资源(三个文件:切片,配置,程序Jar包)提交到集群,为第8步做准备
  5. 资源提交完毕,向RM申请运行mrAppMaster | 1-5为作业提交
  6. RM将用户的请求初始化成一个job,添加到容量调度器中.
  7. 一个NodeManager领取job后创建容器Container,并产生MRAppmaster
  8. Container从HDFS上拷贝资源到本地 | 6-8为作业初始化
  9. MRAppmaster向RM申请运行MapTask资源
  10. RM将MapTask任务分给另两个NodeManager,这两个NodeManager分别领取任务并创建容器 | 9-10为任务分配
  11. MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序
  12. MrAppMaster等待所有MapTask运行完毕后(也可修改ReduceTask运行时机),向RM申请容器,运行ReduceTask。
  13. ReduceTask向MapTask获取相应分区的数据。
  14. 程序运行完毕后,MR会向RM申请注销自己。| 11-14为任务运行

收尾:

  • 此外,AppMaster负责收集Yarn中任务进度和状态(也有容器的),反馈给客户端
  • 客户端本身也能通过程序的waitForCompletion()检查作业是否完成
  • 作业完成后,APPMaster和容器将被清理和释放
  • 历史服务器将保留作业信息以备核查

Yarn调度器

  1. Hadoop作业调度器目前主要三种:FIFO,容量(Capacity Scheduler),和公平(Fair Scheduler)
  2. Apache Hadoop3.1.3(本例)默认是容量调度器
  3. CDH框架默认是公平调度器

FIFO

FIFO调度器/First In First Out/先进先出调度器:顾名思义,单队列,根据作业提交先后顺序,先来先服务,可连续提交任务,直到新提交的任务申请不到资源为止.

image-20220316131031971

由于该调度器不支持多队列,生产环境很少使用,但其FIFO调度策略可使用于一个队列

容量调度器

Capacity Scheduler是Yahoo开发的多用户调度器

image-20220316131507602

特点

  1. 可为每个队列配置一定资源量,每个队列采用FIFO调度策略

  2. 管理员可设置每个队列的资源使用下限和上限

  3. 灵活:队列的空闲资源可借用给紧缺的队列,但job提交后回收借调的资源

  4. 多用户:

    支持多用户共享集群和多job同时运行

    该调度器对同一用户提交的job所占资源进行限定,防止一个人的job独占队列的资源

资源 分配算法

  1. 队列间资源分配:

    使用深度优先算法,为资源占用率最低的队列优先分配资源

  2. 作业间资源分配(同一队列):

    先按优先级大小后按提交时间先后

  3. 容器间 资源分配:

    job拿到资源,先按容器的优先级;

    相同之后,使用数据本地性原则:

    1)数据在任务的节点本地

    2)数据在任务节点的机架

    3)无所谓了

总结:

  1. 队列间并行运行
  2. 一个队列里按job优先级和job提交先后
  3. 队列占集群总资源有上限,同一用户提交的job占用也有上限

公平调度器

Fair Schedulere是Facebook开发的多用户调度器

该调度器分配原则:

  1. 公平
  2. 公平
  3. 还是tnd公平
  4. 总结就是:有资源大家先均分,然后按额定好的多退少补

image-20220316141145316

与容量调度器相同点不同点
多队列核心调度策略(资源利用率 / 缺额比例)
队列容量保证(上下限)单队列资源分配方式(FIFO,DRF / FIFO,FAIR,DRF)
灵活性(借调和归还)
多租户(共享集群和多job并行,限定单用户最大占用资源)

缺额

image-20220316143740722

缺额:某一时刻一个作业应获资源和实际得到的差距

公平调度器就是以弥补这一缺额为目标,因此,调度器优先为缺额大的job分配

队列资源分配方式

  1. FIFO策略:如果使用FIFO策略,此时公平调度器就成为容量调度器

  2. FAIR策略:

    从选择队列–>选择作业–>选择容器

    每一步都按照公平策略分配资源[如下图]

    image-20220316150339946

    1)实际最小资源份额:mindshare = Min(资源需求量,配置的最小资源)

    2)是否饥饿:isNeedy = 资源使用量 < mindshare(实际最小资源份额)

    3)资源分配比:minShareRatio = 资源使用量 / Max(mindshare, 1)

    4)资源使用权重比:useToWeightRatio = 资源使用量 / 权重

资源分配算法

  1. 队列资源分配(多退少补):

    image-20220316150705648

  2. 作业资源分配:

    image-20220316150833484

  3. DRF策略

    以上分配只考虑内存,DRF则考虑了多种资源,包括:内存,CPU,网络带宽等

Yarn常用命令

命令功能
yarn application -list列出所有Application
yarn application -list -appStates根据Application状态过滤
yarn application -kill < ApplicationId >Kill掉Application
yarn logs -applicationId < ApplicationId >查询Application日志
yarn logs -applicationId < ApplicationId > -containerId < ContainerId >查询Container日志
yarn applicationattempt -list < ApplicationId >查看尝试运行的任务(排查)
yarn applicationattempt -status < ApplicationAttemptId >打印ApplicationAttemp状态
yarn container -list < ApplicationAttemptId >列出所有Container
yarn container -status < ContainerId >打印Container状态(任务跑的途中才能看到)
yarn node -list -all列出所有节点
yarn rmadmin -refreshQueues加载队列配置(动态修改)
yarn queue -status < QueueName >打印队列信息

结合生产环境

根据生产环境下并发度选择调度器:公平/容量

容量调度器多队列

  1. 按照框架/模块创建队列

  2. 多队列好处:

    防止菜鸟提交死龟job,耗尽集群资源

    实现任务的降级使用,特殊时期保证重要的任务队列资源充足

  3. 默认的任务提交都是提交到default队列的

  4. -D mapreduce.job.queuename=队列名,向其他队列提交任务,如果程序不允许添加此参数,1:在Driver类中设置;2:使用Tool接口

  5. 单队列资源紧张时,优先级高的任务将优先获取资源

  6. 提交时使用参数设置job优先级:-D mapreduce.job.priority=5

    或者修改正在执行的任务的优先级:

    yarn application -appID < ApplicationID > -updatePriority 优先级

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值