资源调度平台,负责为运算程序提供服务器运算资源,想到与一个操作系统平台。
Yarn基本架构:
Yarn主要组成有Resource Manager、Node Manager、Application Master、Container 。
1、Resource Manager(RM):
1.1 处理客户请求;
1.2 监控Node Manager;
1.3 启动或监控Application Master;
1.4 资源的分配与调度;
2、Node Manager(NM):
2.1 管理单个节点上的资源;
2.2 处理来自Resource Manager的命令;
2.3 处理来自Application Master的命令;
3、Application Master(AM):
3.1 负责数据的切分;
3.2 为应用程序申请资源并分配给内部的任务;
3.3 任务的监控与容错;
4、Container:
Container是Yarn中的资源抽象,封装了某个节点上的多维资源(内存、CPU、网络、磁盘等)。
Yarn工作机制:
1)MR程序提交到客户端所在节点;
2)Yarnrunner向Resource Manager申请一个Application;
3)RM将应用程序资源路径返回给Yarnrunner;
4)该程序将运行所需资源提交给HDFS;
5)提交完资源后,申请运行MRAppMaster;
6)RM将用户请求初始化成一个task,提交给调度队列;
7)其中一个NodeManager拿到task任务;
8)该NodeManager创建容器Container,并产生MRAppMaster;
9)Container从HDFS拷贝资源到本地;
10)MRAppMaster向RM申请运行maptask资源;
11)RM将运行maptask任务分配给另外两个NodeManager,另外两个NodeManager分别领取任务并创建容器;
12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动maptask,maptask对数据分区排序;
13)MRAppMaster等待所有maptask运行完毕,向MR申请容器,运行reducetask;
14)reducetask向maptask获取相应分区的数据;
15)程序运行完毕,MR向RM申请注销。
作业提交过程:
1.作业提交;
2.作业初始化;
3.任务分配;
4.任务运行;
5.进度和状态更新:
Yarn中的任务将其进度和状态返回给应用管理器,客户端每秒向应用管理器请求进度更新,展示给用户。
6.作业完成:
除了向应用管理器请求作业进度外,客户端每5分钟会通过调用waitForCompletion()检查作业是否完成;作业完成后,应用管理器和container会清理工作状态,作业的信息会被作业历史服务器存储以备之后用户核查。
资源调度器:
作业调度器主要有三种:FIFO、Capacity Scheduler和Fair Scheduler
Hadoop2.7.2默认的资源调度器是Capacity Scheduler
1 FIFO(先进先出):
将应用放置在一个队列中,按照提交的顺序运行应用。首先为队列中第一个应用的请求分配资源,第一个应用的请求被满足后再依次为队列中下一个应用服务。
优点:简单易懂;
缺点:不适合共享集群(适合容量调度器或公平调度器),大的应用会占用集群中所有资源,每个应用必须等待直到轮到自己运行。
2 容量调度器(Capacity Scheduler):
允许多个组织共享一个Hadoop集群,每个组织可以分配到全部集群资源的一部分。每个组织被配置一个专门的队列,每个队列被配置为可以使用一定的集群资源。队列可以进一步按层次划分,这样每个组织内的不同用户能够共享该组织队列所分配的资源。
3 公平调度器(Fair Scheduler):
公平调度器旨在为所有运行的应用公平分配资源。
假设有A、B两个用户,分别拥有自己的队列;A启动一个作业,在B没有需求的时候,A会分配到全部可用的资源;当A作业仍在运行的时候B启动一个作业,一段时间后,每个作业都用到了一半资源;这时候如果B启动第二个作业且其他作业仍在运行,那么第二个作业和B的其他作业共享资源,此时B的每个作业将占用四分之一的集群资源,而A继续占用一般的集群资源。