《 Hadoop 3大数据技术快速入门 》的笔记二

第3章 Yarn原理详解

概述

Yarn是一个分布式资源管理和调度系统,也是主从架构,一主多从。

资源指的是各节点机器上的计算资源,包括CPU、内存等,资源管理就是管理这些资源的分配。资源的分配不是Yarn主动做的,而是被动的,先由计算程序根据自己的需要发出资源申请,再由资源管理器决定是否满足它。

资源管理器是Yarn的一个组件,叫作ResourceManager,它运行在Yarn的主节点上,所以我们也把Yarn的主节点叫作ResourceManager(RM)。子节点要被主节点管理,子节点上也必须运行一个组件,这个组件叫NodeManager,所以子节点也被叫作NodeManager(NM)。

我们通常把一个程序叫作一个作业(Job),所以程序调度一般叫作作业调度。

作业的任务必须在子节点上运行,子节点就是计算资源,所以要执行任务就要申请资源,这时要向ResourseManager发出请求。

ApplicationMaster

作业有一个管理进程,负责执行作业的流程和调度作业的任务(注意与Yarn的资源调度进行区分),这个进程叫ApplicationMaster。

如果作业之间有依赖关系,那么ApplicationMaster也会负责维护这个关系。如果某个任务出错,那么ApplicationMaster还可以帮助任务换一个节点重新启动。任务执行完后输出结果的汇集也由ApplicationMaster完成。

每个作业对应一个ApplicationMaster。

ResourceManager和NodeManager是资源管理组件,ApplicationMaster是作业管理组件,ApplicationMaster和任务都运行于容器中。Yarn只负责资源管理和作业调用,作业内的任务管理Yarn不参与,但是作业执行所需的资源是要向Yarn申请的。

Yarn这种将资源管理和作业管理分离的架构使其具备了更强的通用性,它可以作为不同的大数据计算框架的平台,比如MapReduce、Spark、Flink等。

作业调度策略

对于大型集群来说,一个作业一般无法利用所有的计算资源,所以Yarn支持同时运行多个Job。

Yarn内置的调度策略只有两种,一种是“容量调度”,另一种是“公平调度”,分别对应两个Java类,我们把它们叫作作业调度器。Yarn默认使用的是容量调度器。

容量调度器

队列与容器有些类似,也是在逻辑上定义了一个资源范围,这个范围叫作队列的容量。在一个队列中运行的Job一般不允许使用超过范围的资源,让Job在不同的队列中运行就可以支持Job并行了。所以,队列是跨节点的,容器只在节点内划分资源。

Job在提交时可以指定队列,如果不指定就使用默认队列。可能有多个Job提交到一个队列,队列内的Job使用先进先出的调度策略(FIFO),即当前Job运行完下一个Job才能运行。

这种方式不是那么灵活,因为队列一般需要提前创建好,很难动态增减,并且每个队列的容量以百分比固定,同时Job按FIFO调度,对多任务的支持还不够彻底

公平调度器

公平调度器想让所有Job立即运行而不必等待,这与容量调度器有很大不同(容量调度器只允许运行与队列数量相同的Job)。

此图展示了公平调度器一个队列内部的默认调度策略,与容量调度器明显的不同是,它的一个队列可以运行多个Job。 其中,Job1运行时间比较长,在只有Job1运行的时间段使用了队列的全部资源。Job1运行到某个时间后Job2开始运行,调度器拿出一半的资源分给Job2,此时每个Job占50%的资源,一人一半,很公平。当Job2执行完,Job1恢复使用全部资源。

Yarn中包含A和B两个队列,Job1先提交到队列A,此时Yarn中只有Job1自己,所以队列A占用了所有资源。一段时间后Job2提交到队列B,Job2开始执行,它使用队列B中所有的资源,此时Job1缩回到仅使用队列A的所有资源。再过一段时间后,Job3提交到队列B中,此时Job2还在执行,所以它们平分队列B的资源。此时Job2和Job3各占总资源的25%,Job1占50%。再过一段时间,Job2结束,Job3便占据了队列B的所有资源。

这种策略会让小的任务在合理的时间内完成,同时不会让需要长时间运行的、耗费大量资源的任务没有资源可用。

公平调度器的队列根据占用资源使用比重来分配,而不是对全部资源的比例。默认队列比重相同,我们可以为每个队列指定不同的比重。

Yarn与MapReduce程序

MapReduce是一个分布式数据处理框架,作用是快速编写一个大数据处理程序。所谓框架,就是程序的半成品。

MapReduce规定并实现了程序执行的架构和流程,替我们完成了全部与Yarn交互的逻辑,我们只需填充数据处理逻辑即可完整实现一个程序。

**MapReduce框架已完成的功能有任务划分、输入数据的切割和读取、数据在阶段间的分发以及数据的汇总输出。**它没有实现一条数据如何被map和reduce,这两处逻辑由我们来定义。

MapReduce程序其实是一个Yarn客户端,它利用Yarn的节点完成各阶段处理。阶段的先后关系、每个阶段需要划分多少个任务、如何在节点中启动任务、数据如何在阶段间流动都由MapReduce程序决定,它根据自己的需求向Yarn申请Container资源(当然Yarn不一定能满足它)以支撑自己的流程。

一个Yarn客户端主要通过两个组件与Yarn交互:一是作业提交组件,二是ApplicationMaster。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值