YARN的简单介绍

YARN (Yet Another Resource Negotiator)

是什么

是为了弥补Mapreduce的缺点,用来完全取代MapReduce的集群资源管理器,也称做MR2.

弥补了哪些缺点或者说有什么区别呢
  • MR2可以面向其他大数据应用如(Spark/storm/flink)
  • mapreduce中JobTracker要同时负责任务调度,监控,负责重启,MR2将这些任务进行了拆分减轻了JobTracker负担,提高了集群的扩展性(JobTracker在4000节点和40000任务会产生瓶颈,MR2在10000节点和100000任务才会产生瓶颈)
  • 因为MR2中有Resource Schedule(将Cpu,内存,网络资源,磁盘IO等进行了抽象封装)专门进行资源的管理可以对资源更精细的管理。MapReduce配置时就会分配好固定长度的slot,所以会造成资源的浪费

下面先看一张架构图,然后分析一下各个组件的功能

在这里插入图片描述

组件详细介绍
  • ResourceManager
    • ResourceScheduler
      • 只负责集群资源调度
      • 调度器选项
        • 容量调度器
        • 公平调度器
        • 队列调度器
    • ApplicationManager
      • 接受客户端job请求,为应用分配第一个container(资源池)运行第一个ApplicationMaster
      • 负责监控ApplicationMaster,失败时重启ApplicationMaster
  • NodeManager
    • 负责与ApplicationManager通信
    • 负责与ApplicationMaster的通信
    • 负责开辟资源池并启动任务
  • ApplicationMaster [MRAppMaster] (每个人任务都会产生一个ApplicationMaster)
    • 向ResourceScheduler请求获取资源
    • 与NodeManager通信,获取启动任务,停止任务的信息NodeManagerj开辟资源池(Container)给ApplicationMaster
    • 监控这个应用所有任务的运行,如果失败则会重新向RsourceSchedule申请资源,然后由NodeManager分配资源池启动任务
  • container
    • 计算机资源抽象,封装了内存,cpu,磁盘,网络,IO等
    • 切分出一个可以单独运行任务的容器

看完了组件的介绍下面该是最重要的部分了,它是怎么启动一个任务的呢?

YARN启动任务的流程

在这里插入图片描述

  1. client向ResourceManager申请运行任务,申请Job一个唯一的JobID
  2. ResourceSourceManager返回JobId并返回一个stage路径(HDFS的临时目录):HDFS//…/JobId_12123
  3. 客户端会上传Jar包,切片信息,任务规划信息,配置信息等到stage路径
  4. 上传成功给ApplicationManager发送消息,请求继续执行任务
  5. 将请求转发给Resource Schedule请求资源
  6. 资源请求到后,命令NodeManager开辟资源池并启动第一个ApplicationMaster用于管理整个任务的运行
  7. ApplicationMaster读取临时目录的信息,根据切片信息,任务规划计算需要申请的资源
  8. 然后会与ResourceSchedule通信,请求获取资源
  9. 请求到资源后,AppMaster会想NodeManger请求开辟资源池并启动任务(负载均衡在各个节点)
  10. 开启的任务会根据需要获取数据文件并开始运行任务

下面聊一下实际工作中需要使用到的调度器

YARN的调度选项

1. FIFO调度器

原理:根据名字可以看出是按照应用先后提交的顺序来 运行应用的

缺点:显而易见,当运行一些小任务时由于前面在运行的大任务会一直阻塞。

优点: 大任务会占据整个资源运行,可以减少大任务的运行时间

1. 容量调度器 (弹性队列)(出自yahoo)

为不同组织分配不同的队列,队列中的任务使用FIFO的调度策略。

特点

  • 充分利用资源如果一个队列中有多个任务,且资源不够而集群中有其他空闲资源会被改队列使用。可以设置一个最大值来控制该队列会抢占大量的资源
  • 支持抢占:开启抢占后允许调度器终止占用资源超过其队列的容器,终止的容器会在之后重新执行因此会降低集群的效率。
    队列配置可以看成一个树型的结构如下面这样的队列
    root
    |—prod
    |—dev
    ​ |— eng
    ​ |— science

具体配置可参考如下

在这里插入图片描述

我们可以看到dev的队列设置了一个75%的最大值,所以即使prod有空闲资源,dev也不能占用全部的集群资源,也就是说prod总是有其他25%的空闲资源可用,另一方面prod没有设置最大值,可能会使用到整个的集群资源。eng和science没有设置最大值,可能会使用到dev最大75%的集群资源

2. 公平调度器 (出自facebook)
为所有的应用公平的分配资源,可以动态平衡作业的资源,它里面的队列不是设置具体容量而是设置权重。假设有两个用户A和B,他们分别拥有一个队列。当A启动一个job而B没有任务时,A会获得全部集群资源;当B启动一个job后,A的job会继续运行,不过一会儿之后两个任务会各自获得一半的集群资源。如果此时B再启动第二个job并且其它job还在运行,则它将会和B的第一个job共享B这个队列的资源,也就是B的两个job会用于四分之一的集群资源,而A的job仍然用于集群一半的资源,实现在两个用户之间平等的共享

  • 队列内部调度策略
    • FIFO
    • 公平调度(默认如上面的举例)
    • DRF(dominant Resource Fairness)

感谢大家看我的文章,今天Yarn的介绍就到这里为止了,如有问题可以私信或者email我,大家一起学习共同进步。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值