YARN通过两类长期运行的守护进程提供核心服务:管理集群上资源使用的资源管理器resource manager(RM),能够启动和监控容器(container)的节点管理器node manager(NM),container用于执行特定的应用程序进程。与HDFS一样,YARN也是master/slave结构,一个RM管理着多个NM。
YARN应用运行机制
1)client首先联系RM,要求它运行一个application master(AM);
2)RM找到一个能够在container中启动AM的NM;
3)AM运行起来之后做什么依赖于应用本身,有可能在所处的container中简单地执行一个计算并将结果返回给客户端,或是像RM请求更多的container,用于运行一个分布式计算,例如MapReduce。
YARN资源请求
YARN有一个灵活的资源请求模型,请求多个container时可以指定每个container的资源,还可以治container的本地限制要求。
本地化对于确保分布式数据处理算法高效使用集群带宽非常重要,本地限制有时也存在无法被满足的情况,例如一个NM节点已经运行了别的container而无法再启动新的container,此时若有应用请求该节点,则YARN会尝试在同一机架的其他节点上启动一个container,如果还不行则会尝试集群中的任意节点。
YARN应用可以在运行中的任意时刻提出资源申请,可以在最开始提出所有的请求,或者为满足不断变化的应用需要,采取更为动态的方式在需要更多资源时提出请求。Spark采用的就是第一种方式,MapReduce采用的就是第二种方式,在最开始时申请map任务的container,后期再申请reduce任务的container,如果任何任务出现失败,会另外申请容器重新运行失败的任务。
YARN和MapReduce1的对比
MapReduce1中由两类守护进程控制作业执行:一个jobtracker以及一个或多个tasktracker。jobtracker同时负责作业调度和任务进度监控,而在YARN中作业调度由RM负责,任务监控由每个MapReduce作业的AM负