目录
一、YARN产生的背景
YARN是从MRv1(hadoop1.0时代)进化到MRv2(hadoop2.0时代)过程中,解决了扩展性差、可靠性差以及资源利用率低等问题应运而生的。下面是MRv1和MRv2的介绍。
MRv1
1、编程模型:Map阶段和Reduce阶段
2、数据处理引擎:MapTask和ReduceTask
3、运行时环境:JobTracker(资源管理和作业控制)和TaskTracker(接受具体命令并具体执行)
4、mRv1的局限性:
• 扩展性差( JobTracker兼具资源管理及作业调度, 容易负载过大)
• 可靠性差( Master/Slave架构中, Master的单点故障)
• 资源利用率低( Slot资源分配模型)
• 无法支持多种计算平台
MRv2
1、编程模型,数据、处理引擎,与MRv1是一样的
2、唯一不同的是运行时环境。MRv2是运行于YARN之上的MapReduce计算框架·
3、YARN(资管理与调度)和ApplicationMaster(作业控制)。
YARN
支持多中计算框架的资源管理器
• 资源利用率高
• 运维成本低
• 数据共享
二、YARN的设计思想
MRv1和MRv2的框架对比图
MRv1和MRv2的编程模型对比
1、编程模型( MapReduce应用程序的两套编程接口: 新API(mapred) 和旧API(mapreduce))
2、向后兼容问题: 采用MRv1的旧API写的APP, 可以直接使用之前的 Jar包运行于MRv2上, 但采用MRv1; 但采用MRv1的新API写的APP, 不可以如此, 需要使用MRv2编程库重新编译并修改不兼容的参数和 返回值。
MRv1和MRv2的运行环境对比
• JobTracker: 资源和任务的管理和调度
• TaskTracker: 单个节点的资源管理和任务执行
• YARN: 资源管理和调度
• ApplicationMaster: 具体应用程序相关的任务切分、 任务调度和容错等。
三、YARN的基本架构
A、YARN的基本组成结构
ResourceManager:全局的资源管理器,负责整个集群的资源管理、分配与调度。
Scheduler(调度器),纯调度器,默认下是FairScheduler
NodeManager:对每一个slave上的资源和任务做管理
1、定时的向RM汇报HeartBeat(资源的使用情况和Container的运行状态)
2、接受来自AM的启动/停止的请求
Container:资源分配单位(MRv1中slot),动态分配。
ApplicationMaster:每个APP都会包含一个AM,AM的功能包括:
1、向RM申请资源(用Container)
2、将任务做进一步的分配
3、与NM通信启动/停止任务
4、跟踪每一个Task的运行状态(包括Failed后的操作)
B、YARN的通信协议
1、Client与RM通信的协议,ApplicationClientProtocol,作业的提交,应用程序的状态等。
2、AM与RM通信协议,ApplicationMasterProtocol,向RM注册AM,申请资源。
3、AM与NM通信协议,ContainerManagementProtocol,启动/停止Container。
4、RM与NM通信协议,ResourceTracker,汇报slave节点的资源信息包括Container的状态(运行状况)
四、YARN的工作流程
下图的数字表示了YARN的从client提交任务,到申请资源,到创建task,以及task完成后返回结果RM的处理流程。