yarn是一个分布式的资源管理系统。html
它诞生的缘由是原来的MapReduce框架的一些不足:app
一、JobTracker单点故障隐患框架
二、JobTracker承担的任务太多,维护Job状态,Job的task的状态等分布式
三、在taskTracker端,使用map/reduce task表示资源过于简单,没有考虑cpu、内存等使用状况。当把多个须要消耗大量内存的task调度到一块儿时,很容易出现问题spa
演化后的基本组件xml
下面具体解释:htm
yarn是一个资源管理的框架,而非计算的框架,理解这点很重要。对象
图中的Application至关于1.x版本中的map/reduce job。blog
图中的Container是一个逻辑概念,是一组资源(内存、cpu等)的统称。生命周期
AM:每个Application对应一个AM。
ResourceManager:主要来作资源的协调者。有两个重要的组件:
Scheduler:【资源调度】从全部运行着的Application收到资源请求后,构建一个全局的分配计划。而后根据Application特殊的限制以及全局的一些限制条件分配资源。【资源监视】周期性的接受来自NM的资源使用率监控信息。注意这和job的执行状况无关,只是监视资源。另外能够为AM提供其已完成的container的状态信息。
Asm:接收资源请求,向Scheduler申请一个Container提供给AM,并启动AM。向client提供AM运行状态。总结一句话,就是用来管理全部AM的生命周期。
yarn工做流程:
总结的说就是两步:client提交Job到AM,AM请求资源运行起来ASM;ASM接管,它计算split、申请资源、与NM配合运行task、监控task等。
一、Job client向AM提交job。
1)得到ApplicationID
2)将Application定义,以及所需jar包上传到hdfs指定目录(yarn-site.xml的yarn.app.mapreduce.am.staging-dir)
3)构造资源请求对象以及Application提交上下文信息,提交给AM
二、AM向Scheduler请求一个供ASM运行的Container,向其所在NM发送launchContainer信息,启动Container
三、AM于NM协调,启动ASM,并监控之
四、Job client从AM处得到ASM信息,并与之直接通讯
五、ASM计算splits并为全部map构造资源请求
六、ASM作一些OutputCommitter的准备工做
七、ASM向Scheduler申请资源(一组Container)而后与NM一块儿对Container执行一些必要的任务,例如资源本地化
八、ASM监视task,若是失败从新申请Container,若是完成,运行OutputCommitter的cleanup以及commit动做
九、ASM退出
client想知道监控信息的途径:
task的从AM获取
AM的从AsM获取
NM还有一项工做,监控task所使用的资源,若是超出所申请的Container范围,则kill掉其任务进程
yarn是资源框架,计算框架运行于资源框架之上。map-reduce是计算模型,它实现了特定的ApplicationMaster,才得以在yarn上运行。若是是其余的计算模型,还须要实现特定的ApplicationMaster,才能在yarn上运行。
引伸阅读:http://www.aboutyun.com/thread-7678-1-3.html