Yarn~学习日记

Hadoop~Yarn

一、 yarn概述

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

Hadoop集群中Yarn跟HDFS没有直接的关系。

二、 Yarn的基础架构

Yarn由ResourceManager、NodeManager、ApplicationMaster、Container等组件构成。

  1. ResourceManager是Yarn中的重要部分,负责处理客户端请求、监控集群、资源调度分配等任务,是Yarn中的老大哥
  2. NodeManager负责管理单个节点上的资源,处理来自RS和AM的命令。
  3. ApplicationMaster负责向RS申请资源,并且监控任务、提高容错。
  4. Container是一个容器,用来存放任务需要的各种资源(CPU、内存、网络带宽等)。

三、 Yarn的工作机制

1. yarn运行机制

yarn工作之前,需要从Client将要执行的MR程序提交到所在的NodeManager节点上。提交程序之后的工作流程如下:

  1. Client会向ResourceManager申请一个Application,RM会将Application的资源路径、HDFS的相关信息、application_id返回给Client。
  2. Client获得相关信息之后,会提交当前Job需要的运行资源。并且产生Job.split、Job.xml、jar包
  3. 以上步骤落地之后,Job所需的资源才算提交完毕,并且申请运行MRAppMaster
  4. 运行开始,RM中会初始化一个Task任务,这个Task就是当前Job的AppMaster,AppMaster会将当前Job提交到一个队列,等待NodeManger领取任务。
  5. NM领取任务之后,会立刻创建一个Container容器,用来存放Job的运行资源(硬件资源+AppMaster)
  6. AppMaster会从HDFS将要计算的资源下载到NM本地,并通过切片信息向RM申请若干MapTask
  7. 资源申请完毕之后,AM会向MT发送启动程序脚本,MT开始并发执行。
  8. MT执行完毕后,AM会根据MT阶段的结果文件数量,向RM申请RT的运行资源,并将MT的资源回收。
  9. 当RT运行结束之后,AM会跟RM通信,并注销自己,释放资源。

yarn只有在接收到任务之后,才会跟HDFS有交集,操作数据进行运算。

2. yarn的作业提交机制

yarn的作业提交机制与运行机制的步骤大致相同,Client通过调用job.waitForCompletion方法,向整个集群提交MR作业。

作业执行时,yarn会将任务的进度和状态返回给应用管理器,Client每秒(可自行更改配置参数)向应用管理器请求更新进度,并展示给用户。

除了更新进度之外,Client每5秒都会调用waitForCompletion()方法检查作业是否完成,作业完成后,作业信息会被保存到历史服务器以备核查。

四、 yarn的调度算法

yarn有3种资源调度算法:FIFO容量调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)

1. FIFO

FIFO是一种单队列资源调度算法,遵循先进先出的规则,简单易懂。但是,由于FIFO不支持多队列,容易造成任务堵塞、灵活性很差,真实环境中很少使用此方案。

2. 容量调度器

容量调度器是yarn中默认的资源调度器。是Yahoo开发的多用户资源调度器。

1. 容量调度器的特点
  1. 支持多队列:容量调度器底层使用多个队列,每个队列采用FIFO调度策略,并且可以为每个队列配置一定的资源。
  2. 容量有保证:管理员可以为每个队列设置最低资源保障最大资源限制
  3. 灵活性高:因为上述特点,如果队列中的资源有空闲,空闲资源会被借给其他资源不足的队列。当借出资源的队列需要资源时,其他借调资源的队列会将资源返还
  4. 多租户:容量调度器可以支持多个用户共享集群资源,并切支持多用户的程序同时运行。为了防止用户之间抢占资源,可以为每个用户设置资源限制。
2. 容量调度器的资源分配算法
1. 队列资源分配

使用深度优先算法优先给资源占用率低的资源队列分配资源。

2. 作业资源分配

按照Job提交的先后顺序和Job的优先级分配资源。

3.容器资源分配
  • 按照容器(container)的优先级分配资源
  • 如果容器的优先级相同,则按照本地优先原则,顺序依次如下:
    • 任务和数据在同一节点
    • 任务和数据在同一机架
    • 任务和数据在同一集群

3. 公平调度器

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

1. 公平调度器的特点

公平调度器具备容量调度其的特点:

  • 多队列
  • 队列资源有保障
  • 灵活性高
  • 多租户

并且,公平调度器还有其他特点:

  1. 核心资源的调度策略不同:

    • 容量调度器优先分配给占用率低的队列
    • 公平调度器优先分配给任务缺额大的队列
  2. 每个队列单独分配资源的方式不同

    • 容量调度器:FIFO、DRF
    • 公平调度器:FIFO、DRF、FAIR

    如果公平调度器选择FIFO的资源分配方式,那么就等于是容量调度器

    什么是缺额:

    公平调度器在时间尺度上,为每一个队列分配的资源都是相同的。某一时刻上的Job的应获得的资源和实际获得的资源的差叫做缺额。

2. 公平调度器的资源分配方法
1. 队列资源分配

每个队列对集群的资源需求不同,首先将集群资源平均分配给所有队列,多分配资源的队列会将多余的资源让出。之后进行下一次计算,将多出的资源再次平均分配给资源不足的队列,以此类推,直到资源完全分配给每个队列。

2. 作业资源分配

公平调度器的作业资源分配分为两种情况:加权、不加劝。

  1. 不加权分配:类似队列资源分配的方式,先将资源平均分配给每一个Job,之后将出让的多余资源经过计算再次平均分配给资源不足的Job,以此类推,直到没有空闲资源为止。
  2. 加权分配:分配方式与不加劝的类似,但是在计算时对Job进行加权计算。
3. DRF策略

按照不同应用所需的不同资源类型,按需分配。

yarn默认只考虑内存资源

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值