一、了解YARN基本设计思想
一个 ResourceManager 和多个 NodeManager 构成了 Yarn 资源管理框架。他们是 Yarn 启动后长期运行的守护进程,来提供核心服务。
Yarn 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等组件构成。
ResourceManager ( RM)主要作用如下:
(1) 处理客户端请求
(2) 监控 NodeManager
(3) 启动或监控 ApplicationMaster
(4) 资源的分配与调度
NodeManager ( NM)主要作用如下:
(1) 管理单个节点上的资源
(2) 处理来自 ResourceManager 的命令
(3) 处理来自 ApplicationMaster 的命令
ApplicationMaster ( AM ) 作用如下:
(1) 负责数据的切分
(2) 为应用程序申请资源并分配给内部的任务
(3) 任务的监控与容错
Container
Container 是 Yarn 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
二、了解MRv1发展到YARN的原因
1.1MRv1 主要有以下缺点:
扩展性差。在 MRv1 中,JobTracker同时兼备了资源管理和作业控制两个功能,这成为系统的一个最大瓶颈,严重制约了 Hadoop 集群扩展性。
可靠性差。MRv1 采用了 master/slave 结构,其中,master 存在单点故障问题,一旦它出现故障将导致整个集群不可用。
资源利用率低。MRv1 采用了基于槽位的资源分配模型。Hadoop 将槽位分为Map Slot 和 Reduce Slot 两种,且不允许它们之间共享,常常会导致一种槽位资源紧张而另外一种闲置(比如一个作业刚刚提交时,只会运行 Map Task,此时 Reduce Slot 闲置)。
无法支持多种计算框架。MapReduce 这种基于磁盘的离线计算框架已经不能满足应用要求,从而出现了一些新的计算框架,包括内存计算框架、流式计算框架和迭代式计算框架等,而 MRv1 不能支持多种计算框架并存。
1.2 YARN 实际上是一个弹性计算平台,可对多种框架进行统一管理。具有以下优势:
资源利用率高。共享集群模式则通过多种框架共享资源,使得集群中的资源得到更加充分的利用。
运维成本低。
数据共享。跨集群间的数据移动不仅需花费更长的时间,且硬件成本也会大大增加,而共享集群模式可让多种框架共享数据和硬件资源,将大大减小数据移动带来的成本。
三、熟悉YARN的工作流程
3.1 作业提交到运行结束,如何调度
3.1.1容器调度(Capacity Scheduler)
Capacity调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。
工作逻辑
Capacity Schedule调度器以队列为单位划分资源。简单通俗点来说,就是一个个队列有独立的资源,
队列的结构和资源是可以进行配置的,如下图:
队列以分层方式组织资源,设计了多层级别的资源限制条件以更好的让多用户共享一个Hadoop集群
比如队列资源限制、用户资源限制、用户应用程序数目限制。队列里的应用以FIFO方式调度,每个队列可
设定一定比例的资源最低保证和使用上限,同时,每个用户也可以设定一定的资源使用上限以防止资源
滥用。而当一个队列的资源有剩余时,可暂时将剩余资源共享给其他队列。
3.1.2公平调度器(Fair Scheduler)
在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。实现了用户队列间的公平调度,也实现了队列内作业间的公平调度
工作逻辑
假设用户A,B各自拥有队列Q1,Q2
A先启动一个job J1,则J1占用集群所有资源
B启动一个job J2,则Q1中的J1需要分一半资源给Q2中的J2
B又启动一个job J3,则Q2中的J2需要分一半资源给Q2中的J3
3.1.3先进先出调度器(FIFO Scheduler)
FIFO Scheduler把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。正因为是先来先得,所以小任务往往会被大任务阻塞。