YARN详解

一、回顾

1、MR job提交到yarn的工作流程

面试题:        Yarn的工作流程

                       MR 架构设计

2、容器  contariner

一定数量的cpu+memory

二、Yarn的架构设计(主从、资源和作业调度管理)

RM:(Applications Manager+Scheduler)
Applications Manager:应用程序管理器,应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动AM、监控AM运行状态并在失败时重新启动等,跟踪分给的Container的进度、状态也是其职责。

Scheduler:先进先出调度器,计算调度器,公平调度器。

调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位是Container,从而限定每个任务使用的资源量。Shceduler不负责监控或者跟踪应用程序的状态,也不负责任务因为各种原因而需要的重启(由ApplicationMaster负责)。总之,调度器根据应用程序的资源要求,以及集群机器的资源情况,为应用程序分配封装在Container中的资源。

调度器是可插拔的,例如CapacityScheduler、FairScheduler。

NM
NM是每个节点上的资源和任务管理器。它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;同时会接收并处理来自AM的Container启动/停止等请求。

APP MASTER:一个job只有一个,相当于主程序(spark driver)

用户提交的应用程序job均包含一个AM,负责应用的监控,跟踪应用执行状态,重启失败任务等。ApplicationMaster是应用框架,它负责向ResourceManager协调资源,并且NodeManager协同工作完成Task的执行和监控。MapReduce就是原生支持的一种框架,可以在YARN上运行Mapreduce作业。有很多分布式应用都开发了对应的应用程序框架,用于在YARN上运行任务,例如Spark,Storm等。如果需要,我们也可以自己写一个符合规范的YARN application。

Yarn平台一般运行job>=0

Contariner:运行在NM上。

是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container 表示的。 YARN会为每个任务分配一个Container且该任务只能使用该Container中描述的资源。

三、常用的命令

1、回顾wordcount的步骤

离开安全模式:

hdfs dfsadmin -safemode leave

删除已有的/wordcount目录下的所有文件:

hdfs dfs -rm -r /wordcount

重新创建:

 hdfs dfs -mkdir -p /wordcount/input

将准备好的文件上传到/input:

hdfs dfs -put HBinz.log /wordcount/input

2、在这里我们尝试用yarn的命令来提交jar包到yarn,而不是通过hadoop命令

(1)yarn jar /opt/software/hadoop-2.8.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount /wordcount/input /wordcount/output1

(2)发现running错了,如何通过命令停止

yarn application -list

yarn application -kill application_1534945138947_0003

同时,执行的页面也会返回结果“job被kill掉”

3、常用命令

yarn application -list

yarn application -kill appId

 yarn jar 

4、回顾yarn MR2的工作流程

1:用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

2:ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

3:ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。

4:ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

5:一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。

6:NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

7:各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。

8:应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。

简而言之:

当用户向 YARN 中提交一个应用程序后, YARN 将分两个阶段运行该应用程序:

a. 第一个阶段是启动ApplicationMaster;

b. 第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。

5、Yarn调度器(先进先出、计算、公平)以后讲CDH会更加简单

先进先出调度器:FIFO

6、Yarn资源管理与调度、参数配置

在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中   ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离。

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

7、Memory资源的调度和隔离

基于以上考虑,YARN允许用户配置每个节点上可用的物理内存资源,注意,这里是“可用的”,因为一个节点上的内存会被若干个服务共享,比如一部分给YARN,一部分给HDFS,一部分给HBase等,YARN配置的只是自己可以使用的,配置参数如下:

(1) yarn.nodemanager.resource.memory- - mb

表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。

(2) yarn.nodemanager.vmem- - pmem- - ratio

任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2:1。

(3) yarn.nodemanager.pmem- - check- - enabled

是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true。

(4) yarn.nodemanager.vmem- - check- - enabled

是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true。

(5) yarn.scheduler.minimum- - allocation- - mb

单个任务可申请的最少物理内存量,默认是1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数。

(6) yarn.scheduler.maximum- - allocation- - mb

单个任务可申请的最多物理内存量,默认是8192(MB)。

8、CPU资源的调度和隔离

CPU的主要配置参数:

(1) yarn.nodemanager.resource.cpu- - vcores

表示该节点上YARN可使用的虚拟CPU个数,默认是4,注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够4个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数。

(2 )yarn.scheduler.minimum- - allocation- - vcores

单个任务可申请的最小虚拟CPU个数,默认是1,如果一个任务申请的CPU个数少于该数,则该对应的值改为这个数。

(3 )yarn.scheduler.maximum- - allocation- - vcores

单个任务可申请的最多虚拟CPU个数,默认是32。

默认情况下,YARN是不会对CPU资源进行调度的,你需要配置相应的资源调度器。

9、  生产场景:

(1)计算及时性要求比较高: memory不够 快速出结果 cpu足够的

(2)反正:cpu不够

5分钟出1个job : job运行1分钟oom memory+2G 在计算只需1分钟,比如在第4分钟完成

CDH 动态资源池

生产场景总结:

memory不够   cpu够 : oom错误 作业停止(memory不够的话,会停止作业,进而增加memory,由于cpu足够,所以计算快)

memory够       cpu不够: 作业慢(由于memory够,因此会低cpu执行,所以会计算慢)

因为内存或者cpu不够修改过以上配置后,记得要重启yarn!!!

10、资源调度

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值