Yarn简介

Yarn在Hadoop中的位置

Yarn简介_第1张图片
Yarn在Hadoop中的位置

Yarn的优点

  • YARN把JobTracker分为ResouceManager和ApplicationMaster,ResouceManager专管整个集群的资源管理和调度,而ApplicationMaster则负责应用程序的任务调度和容错等
  • YARN不再是一个单纯的计算框架,而是一个框架管理器,用户可以将各种各样的计算框架移植到YARN之上,由YARN进行统一管理和资源分配
  • 对于资源的表示以内存和CPU为单位,比之前slot 更合理(slot是 Hadoop的资源单位,Hadoop利用slots来管理分配节点的资源。每个Job申请资源以slots为单位)hadoop中slot简介(map slot 和 reduce slot)

Yarn架构

Yarn简介_第2张图片
Yarn运行机制1

YARN主要由ResouceManager、NodeManager、ApplicationMasterContainer等4个组件构成

ResourceManager :

处理客户端请求
启动和监控ApplicationMaster
监控NodeManager
资源的分配与调度

NodeManager:

管理单个节点上的资源
处理来自ResourceManager的命令
处理来自ApplicationMaster的命令

ApplicationMaster:

为应用程序申请资源并分配给内部的任务
任务的监控与容错

Container:

对任务运行环境进行抽象,封装CPU、内存等资源

MapRuduce在Yarn中的工作机制

Yarn简介_第3张图片
Yarn运行机制2
Yarn简介_第4张图片
Yarn运行机制3

1)客户端向resourcemanager发送job请求,客户端产生Runjar进程与resourcemanager通过rpc通信

2)resourcemanager向客户端 回Job相关资源的提交路径以以及jobID

3)客户端将Job相关的资源提交到相应的共享文件系统的路径下(eg.HDFS)

4)客户端向resourcemanager提交job

5)resourcemanager通过调度器在nodemanager创建一个容器,并在容器中启用 MRAppMaster进程(该进程由resourcemanager启动)。

6)该MRAppMaster进程对作业进行初始化,创建多个对象对作业进行跟踪。

7)MRAppMaster从共享文件系统中获得计算到的输入分片(只获取分片信息,不需要jar等相关资源),为每一个分片创建一个map以及指定数量的reduce对象。之后 MRAppMaster决定如何运行构成mapreduce作业的各个任务,如果作业很小,则与 MRAppMaster在同一个JVM上运行

8)若作业很大,则MRAppMaster会为所有map任务和reduce任务向resourcemanager发起申请容器资源请求。请求中包含了map任务的数据本地化信息以及输入分片等信息。

9)Resourcemanager为任务分配了容器之后,MRAppMaster就通过与NodeManager通信启动容器,由MRAppMaster负责分配在那些nodemanager上运行map(即 YarnChild进程)和reduce任务。

10)运行map和reduce任务的nodemanager从系统中获取job相关资源,包括 jar文件,配置文件等。

11)运行map和reduce任条。

12)关于状态的检测与更新不经过resourcemanager:任务周期性的向MRAppMaster汇报状态及进度,客户端每秒钟通过查询一次MRAppMaster获取状态更新信息。

注意:http://dongxicheng.org/mapreduce-nextgen/yarnmrv2-resource-manager-resource-manager/

1.由于resourcemanager负责资源的分配,当NodeManager启动时,会向 ResourceManager注册,而注册信息中会包含该节点可分配的CPU和内存总量

2.YARN的资源分配过程是异步的,也就是说,资源调度器将资源分配给一个application后,不会立刻push给对应的ApplicaitonMaster,而是暂时放到一个缓冲区中,等待 ApplicationMaster通过周期性的RPC函数主动来取。

容错

RM:HA方案避免单点故障
AM:AM向RM周期性发送心跳,出故障后RM会启动新的AM,受最大失败次数限制
NM:周期性RM发送心跳,如果一定时间内没有发送,RM 就认为该NM 挂掉了,或者NM上运行的Task失败次数太多,就会把上面所有任务调度到其它NM上
Task:Task也可能运行挂掉,比如内存超出了或者磁盘挂掉了,NM会汇报AM,AM会把该Task调度到其它节点上,但受到重试次数的限制

资源调度和资源隔离机制

资源调度由ResourceManager完成,而资源隔离由各个NodeManager实现。

资源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离,ResourceManager将NodeManager上资源分配给任务后,NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证,这就是所谓的资源隔离。

Yarn中同时支持内存和CPU两种资源的调度(默认是支持内存的)
内存资源调度:
采用进程监控的方案,为每一个NodeManager启动一个监控线程监控每个container内存使用情况,一旦发现超过约定的资源量,则会将其杀死。

默认情况下,NodeManager不会对CPU资源进行任务隔离,你可以通过启用CGroup来支持CPU隔离。
CPU资源按照百分比进行使用和隔离。

你可能感兴趣的:(Yarn简介)