YARN(YetAnother Resource Negotiator)

来源:互联网 发布:js和java哪个好 编辑:程序博客网 时间:2024/04/29 23:08

YARN(YetAnother Resource Negotiator)

YARN:针对MapReduce在扩展性和多框架支持方面的不足(扩展性受限、单点故障、难以支持MR之外的计算),提出了全新的资源管理框架YARN,它将JobTracker中的资源管理和作业控制功能分开,分别由两个不同进程ResourceManager和ApplicationMaster实现,其中ResourceManager负责所有应用程序的资源分配,而ApplicationMaster仅仅负责管理一个应用程序。

MapReduce框架的问题主要集中在:

(1)   JobTracker是MapReduce的集中处理点,存在单点故障;

(2)   JobTracker完成了太大的任务,造成了过多的资源消耗:当MapReduce job非常多的时候,会造成很大的内存开销,也就增加了JobTracker fail的风险(MapReduce只能支持4000节点主机的上限!);

(3)   TaskTracker端:以MapReduce task的数目为资源的表示过于简单,没有考虑到cpu/内存的占用情况,如果两个大内存消耗的task被调度在一起,很容易发生内存溢出错误;

(4)   在TaskTracker端把资源强制划分为map task slot和reduce task slot,如果当系统中只有map task或者只有reduce task时会造成资源浪费;

(5)   源代码层面分析:一个类做了太多事情,代码量多大3000多行,造成类的任务不清晰,增加bug修复和版本维护的难度等

MR:离线计算框架;Storm:实时计算框架;Spark:内存计算框架!


YARN基本结构(Container是Yarn作资源隔离所用)

ResourceManager:管理和分配集群的资源,是集群的一个单点,通过zookeeper来保存状态以便failover(容错)。RM主要包含两个功能组件:Applications Manager(AM)和Resource Scheduler(RS),其中AM负责接收client的作业提交的请求,为AppMaster请求Container,并且处理AM的fail;RS负责在多个application之间分配资源,存在queue capacity的限制,RS调度的单位是Resource Container,一个Container是memory,cpu,disk,network的组合。Yarn支持可插拔的调度器!(处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度)

NodeManager:部署在每个节点上的slave,负责启动container,并且检测进程组资源使用情况。NodeManager上可以搭载一些简单的service,比如shuffle service。(单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令)

ApplicationMaster:每个application的master,负责和Resource Manager协商资源,将相应的Task分配到合适的Container上,并监测Task的执行情况。在和RM协商资源的时候可以加上资源偏好,比如MapReduceMaster为了本地化会将InputSplit的信息转化成对应的资源请求。ApplicationMaster将其history文件持久化存储在HDFS上,并在AM出问题的时候,回放history文件,进行断点重启。(数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错)


Yarn模块架构(Yarn:下一代MapReduce!)

过程:(1)用户通过JobClient向RM提交作业;(2)RM为AM分配Container,并请求NM启动AM;(3)AM启动后向RM协商Task的资源;(4)获得资源后AM通知NM启动Task;(5)Task启动后向AM发送心跳,更新进度、状态和出错信息。

Yarn采用基于事件驱动进制的异步编程模型:一方面使得处理逻辑更加清晰,另一方面较好地改善了并发性。EventHandler对事件的处理过程通过状态机来描述,handler接受到一个事件后跳转到另外一个状态,同时触发一个动作(通常是产生一个其他类型的event,形成一个事件处理流)。


如下图RMAppAttempt的状态机所示,比如在SCHEDULED状态,接收到CONTAINER_ALLOCATED事件,会跳转到ALLOCATED状态,表示已经为对应的AM分配了Container,同时会触发一个LAUNCH AM的事件,RM接到该事件会请求NM启动AM Container。


Yarn采用事件驱动的模式,下面通过对一个作业提交、启动、执行的分析来说明JobClient、ResourceManager、AppMaster、NodeManager的功能模块组织和事件处理流程。


JobClient模块图

JobClient通过ClientRMProtocol和RM通信,向其提交作业;作业成功启动后通过MRClientProtocol和MRAppMaster通信,查询作业和任务的状态进度信息,作业完成后通过MRClientProtocol和JobHistoryServer通信查询历史信息。

ResourceManager:在RM上一个RMApp对象代表一个application,和task类似,application也引入attempt的概念,一个application因为机器故障等原因application master失败,RM会重新分配一个AM继续尝试。

作业提交到RM后,RM事件流图


MRAppMaster事件流图


                                                                       NodeManager模块和事件流图


运行在YARN上的软件

 

 

 

 

0 0
原创粉丝点击