Yarn知识总结

一、yarn的核心

RM(resource manager)的职责:

1.除了客户端的请求,接受JobSubmitter提交的作业(按照作业的上下文(Context))信息run.sh提交的参数,以及从NM(nodemanager)收集来的状态信息),启动调度过程,分配一个container作为APP master

2.RM作为中心服务,拥有系统中所有应用的资源分配决定权,其工作是调度、启动每一个job所属的application、监控application的存在情况

3.通过心跳通信,达到监控NM(nodemanager)

4.RM有一个纯碎的调度器组件scheduler

NM(nodemanager)的职责:

1.是slave进程,是每台机器的框架代理

2.处理来自RM的任务请求

3.接受处理来自AM(application master)的container的启动、停止请求

4.启动应用程序的container,并监控资源使用情况,并报告给RM

AM(application master)的职责:

1.应用程序的master,每一个应用对应一个AM,在用户提交一个应用程序时,一个AM的轻量型进程实力会启动,AM会协调这个应用程序内的所有任务的执行

2.负责一个job任务生命周期内的所有工作

3.每一个job都有一个AM,运行在RM机器之外的机器上

4.和NM协同工作,与RM的scheduler协商合适的container,并监控

container(容器):

1.container(进程需要的资源cpu,内存,io)是进程

在mapreduce中container作为一个map task或者是一个reduce task

在spark container 可以同时拥有map task(线程)+reduce task(线程)

二、yarn的运行过程

在这里插入图片描述
1.client向yarn提交job,首先找ResourceManager分配资源,
2.ResourceManager开启一个Container,在Container中运行一个Application manager
3.Application manager找一台nodemanager启动Application master,计算任务所需的计算
4.Application master向Application manager(Yarn)申请运行任务所需的资源
5.Resource scheduler将资源封装发给Application master
6.Application master将获取到的资源分配给各个nodemanager
7.各个nodemanager得到任务和资源开始执行map task
8.map task执行结束后,开始执行reduce task
9.map task和 reduce task将执行结果反馈给Application master
10.Application master将任务执行的结果反馈pplication manager

三、高可用

1.RM挂掉:通过zookeeper设置备用RM,所谓高可用,当前RM挂掉,备用RM上位(机器要单数,zookeeper才可保证有一台被选主)

2.AM挂掉:通知RM,RM重启挂掉的AM,AM上有个RM applicationmanager,记录着AM的任务记录,已经完成的application不会重复

3.NM挂掉:不止一个,当一个挂掉,会通过心跳方式通知RM,RM知会AM,做进一步处理

四、YARN的资源管理与调优

ResourceManager将某个NodeManager上资源分配给任务(资源调度)后,NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证(资源隔离)。

内存资源调优

1)yarn.nodemanager.resource.memory-mb 该节点上YARN可使用的物理内存总量

假设我的这个节点上的内存有48G,其中25%是要给Linux的,而剩余的75%给大数据进程。其中,一般把DN和NM放置在同一个机器上(数据本地化)。默认的DN是给到4个G,而NM是给到3个G。(这两个参数分别是在hadoop-env.sh和yarn-env.sh两个shell脚本当中设置)。

我们的contanier最多也就可以用29个G了, yarn.nodemanager.resource.memory-mb,当这个参数设置成剩余全部内存时意味着我们的NM在执行tasks的时候可以使用到29个G。

2)yarn.scheduler.minimum-allocation-mb 单个任务可申请的最少物理内存量

一个contnaier最小将分配多少的G,我们生产上一般是设置成2个G,要是机器上剩余的内存达不到2个G,就不再在这个机器上开启container。

3)yarn.scheduler.maximum-allocation-mb 单个任务可申请的最多物理内存量

当一个container开启以后,在上面放置的task不是一下子就使用到最大内存极限的,一般会先个2个G(就是最小内存限制),如果不够了就是继续增加,直到最大内存限制,还不够就报错。所以最大内存设置一般和整个节点的contanier可用内存设置是一样大。

CPU资源调优

vcore:虚拟cpu,yarn自己引入的新概念,因为不同的物理core的性能不同,所以为了每个core的计算能力能一致点,这个时候设置了一个vcore。一般1个物理core对应2个vcore,也有公司是1:1的。

cpu同样也有三组参数:

yarn.nodemanager.resource.cpu-vcores
yarn.scheduler.minimum-allocation-vcores
yarn.scheduler.maximum-allocation-vcores

三组默认值分别是8,1,8。假如物理core是8个话,要考虑究竟要个多少个core给大数据使用。如果是给了6个core预留2个core给其他进程,这样的vcore将有12个。

在Yarn中有三种调度器可以选择:FIFO Scheduler (先进先出队列),Capacity Scheduler(容量调度器),FairScheduler(公平调度器)。

在这里插入图片描述
FIFO Scheduler把应用按提交的顺序排成一个队列,这是一个 先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。
FIFO Scheduler是最简单也是最容易理解的调度器,也不需要任何配置,但它并不适用于共享集群。大的应用可能会占用所有集群资源,这就导致其它应用被阻塞。在共享集群中,更适合采用Capacity Scheduler或Fair Scheduler,这两个调度器都允许大任务和小任务在提交的同时获得一定的系统资源。
从图中可以看出,在FIFO 调度器中,小任务会被大任务阻塞。

在这里插入图片描述

hadoop2.x使用的默认调度器是Capacity Scheduler。

1、支持多个队列,每个队列可配置一定量的资源,每个采用FIFO的方式调度。

2、为了防止同一个用户的job任务独占队列中的资源,调度器会对同一用户提交的job任务所占资源进行限制。

3、分配新的job任务时,首先计算每个队列中正在运行task个数与其队列应该分配的资源量做比值,然后选择比值最小的队列。比如如图队列A15个task,20%资源量,那么就是15%0.2=70,队列B是25%0.5=50 ,队列C是25%0.3=80.33 。所以选择最小值队列B。

4、其次,按照job任务的优先级和时间顺序,同时要考虑到用户的资源量和内存的限制,对队列中的job任务进行排序执行。

5、多个队列同时按照任务队列内的先后顺序一次执行。例如下图中job11、job21、job31分别在各自队列中顺序比较靠前,三个任务就同时执行。

在这里插入图片描述

在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。如图所示,当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。
需要注意的是,在图Fair调度器中,从第二个任务提交到获得资源会有一定的延迟,因为它需要等待第一个任务释放占用的Container。小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终的效果就是Fair调度器即得到了高的资源利用率又能保证小任务及时完成。

调度器的使用

调度器的使用是通过yarn-site.xml配置文件中的yarn.resourcemanager.scheduler.class参数进行配置的,默认采用Capacity Scheduler调度器。如果我们要使用Fair调度器,需要在这个参数上配置FairScheduler类的全限定名: org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值