5.29 YARN
5.29.4 YARN 开源增强特性
任务优先级调度
在原生的YARN资源调度机制中,如果先提交的MapReduce Job长时间地占据整个 Hadoop集群的资源,会使得后提交的Job一直处于等待状态,直到Running中的Job执 行完并释放资源。
MRS集群提供了任务优先级调度机制。此机制允许用户定义不同优先级的Job,后启动 的高优先级Job能够获取运行中的低优先级Job释放的资源;低优先级Job未启动的计算 容器被挂起,直到高优先级Job完成并释放资源后,才被继续启动。
该特性使得业务能够更加灵活地控制自己的计算任务,从而达到更佳的集群资源利用
Hadoop YARN的权限机制是通过访问控制列表(ACL)实现的。按照不同用户授予不 同权限控制,主要介绍下面两个部分:
● 集群运维管理员控制列表(Admin Acl)
该功能主要用于指定YARN集群的运维管理员,其中,管理员列表由参数
“yarn.admin.acl”指定。集群运维管理员可以访问ResourceManager WebUI,
还能操作NodeManager节点、队列、NodeLabel等,但不能提交任务。
● 队列访问控制列表(Queue Acl)
为了方便管理集群中的用户,YARN将用户/用户组分成若干队列,并指定每个用 户/用户组所属的队列。每个队列包含两种权限:提交应用程序权限和管理应用程 序权限(比如终止任意应用程序)。
开源功能:
虽然目前YARN服务的用户层面上支持如下三种角色:
● 集群运维管理员
● 队列管理员
● 普通用户
但是当前开源YARN提供的WebUI/RestAPI/JavaAPI等接口上不会根据用户角色进行权 限控制,任何用户都有权限访问应用和集群的信息,无法满足多租户场景下的隔离要 求。
增强:
安全模式下,对开源YARN提供的WebUI/RestAPI/JavaAPI等接口上进行了权限管理上 的增强,支持根据不同的用户角色,进行相应的权限控制。
各个角色对应的权限如下:
● 集群运维管理员:拥有在YARN集群上执行管理操作(如访问ResourceManager WebUI、刷新队列、设置NodeLabel、主备倒换等)的权限。
● 队列管理员:拥有在YARN集群上所管理队列的修改和查看权限。
● 普通用户:拥有在YARN集群上对自己提交应用的修改和查看权限。
自研超级调度器 Superior Scheduler 原理
Superior Scheduler是一个专门为Hadoop YARN分布式资源管理系统设计的调度引 擎,是针对企业客户融合资源池,多租户的业务诉求而设计的高性能企业级调度器。
Superior Scheduler可实现开源调度器、Fair Scheduler以及Capacity Scheduler的所有 功能。另外,相较于开源调度器,Superior Scheduler在企业级多租户调度策略、租户 内多用户资源隔离和共享、调度性能、系统资源利用率和支持大集群扩展性方面都做 了针对性的增强。设计的目标是让Superior Scheduler直接替代开源调度器。
类似于开源Fair Scheduler和Capacity Scheduler,Superior Scheduler通过YARN调度 器插件接口与YARN Resource Manager组件进行交互,以提供资源调度功能。图 5-132为其整体系统图。
图5-132 Superior Scheduler 内部架构
图5-132中,Superior Scheduler的主要模块如下:
● Superior Scheduler Engine:具有丰富调度策略的高性能调度器引擎。
● Superior YARN Scheduler Plugin:YARN Resource Manager和Superior Scheduler Engine之间的桥梁,负责同YARN Resource Manager交互。
在调度原理上,开源的调度器都是基于计算节点心跳驱动的资源反向匹配作业的 调度机制。具体来讲,每个计算节点定期发送心跳到YARN的Resource Manager 通知该节点状态并同时启动调度器为这个节点分配作业。这种调度机制把调度的 周期同心跳结合在一起,当集群规模增大时,会遇到系统扩展性以及调度性能瓶 颈。另外,因为采用了资源反向匹配作业的调度机制,开源调度器在调度精度上 也有局限性,例如数据亲和性偏于随机,另外系统也无法支持基于负载的调度策 略等。主要原因是调度器在选择作业时,缺乏全局的资源视图,很难做到最优选 择。
Superior Scheduler内部采用了不同的调度机制。Superior Scheduler的调度器引 入了专门的调度线程,把调度同心跳剥离开,避免了系统心跳风暴问题。另外,
Superior Scheduler调度流程采用了从作业到资源的正向匹配方法,这样每个调度 的作业都有全局的资源视图,可以很大的提到调度的精度。相比开源调度器,
Superior Scheduler在系统吞吐量、利用率、数据亲和性等方面都有很大提升。
图5-133 Superior Scheduler 性能对比
Superior Scheduler除了提高系统吞吐量和利用率,还提供了以下主要调度功能:
● 多资源池
多资源池有助于在逻辑上划分集群资源并在多个租户/队列之间共享它们。资源池 的划分可以基于异构的资源或完全按照应用资源隔离的诉求来划分。对于一个资 源池,不同队列可配置进一步的策略。
● 每个资源池多租户调度(reserve、min、share、max)
Superior Scheduler提供了灵活的层级多租户调度策略。并允许针对不同的资源池 可以访问的租户/队列,配置不同策略,如下所示。
表5-28 策略描述 策略名称 描述
reserve 预留租户资源。即使租户没有作业,其他租户也不能使用该预留 的资源。其值可以是百分比或绝对值。如果两者都配置,调度系 统动态计算转换为资源绝对值,并取两者的最大值。缺省的 reserve值为0。相对于定义一个专用资源池并指定具体机器的方 式,reserve的策略可以认为提供了一种灵活的浮动预留功能,
由于并不限定具体的机器,可以提高计算的数据亲和性,也不会
租户资源分配策略示意图,如图5-134所示。
图5-134 策略示意图
说明
其中“total”表示总资源,不是调度策略。
同开源的调度器相比,Superior Scheduler同时提供了租户级百分比和绝对值的混 配策略,可以很好的适应各种灵活的企业级租户资源调度诉求。例如,用户可以 在一级租户提供最大绝对值的资源保障,这样租户的资源不会因为集群的规模改 变而受影响。但在下层的子租户之间,可以提供百分比的分配策略,这样可以尽 可能提升一级租户内的资源利用率。
● 异构和多维资源调度
Superior Scheduler支持CPU和内存资源的调度外,还支持扩展支持以下功能:
– 节点标签可用于识别像GPU_ENABLED,SSD_ENBALED等节点的多维属性,
可以根据这些标签进行调度。
– 资源池可用于对同一类别的资源进行分组并分配给特定的租户/队列。
● 租户内多用户公平调度
在叶子租户里,多个用户可以使用相同的队列来提交作业。相比开源调度器,
Superior Scheduler可以支持在同一租户内灵活配置不同用户的资源共享策略。例 如可以为VIP用户配置更多的资源访问权重。
● 数据位置感知调度
Superior Scheduler采用“从作业到节点的调度策略”,即尝试在可用节点之间调 度给定的作业,使得所选节点适合于给定作业。通过这样做,调度器将具有集群 和数据的整体视图。如果有机会使任务更接近数据,则保证了本地化。而开源调 度器采用“从节点到作业的调度策略”,在给定节点中尝试匹配适当的作业。
● Container调度时动态资源预留
在异构和多样化的计算环境中,一些container需要更多的资源或多种资源,例如 Spark作业可能需要更大的内存。当这些container与其他需要较小资源的
container竞争时,可能没有机会在合理的时间内获得所需的资源而处于饥饿状 态。由于开源的调度器是基于资源反向匹配作业的调度方式,会为这些作业盲目 的进行资源预留以防进入饥饿状态。这就导致了系统资源的整体浪费。Superior Scheduler与开源特性的不同之处在于:
– 基于需求的匹配:由于Superior Scheduler采用“从作业到节点的调度”,能 够选择合适的节点来预留资源提升这些特殊container的启动时间,并避免浪 费。
– 租户重新平衡:启用预留逻辑时,开源调度器并不遵循配置的共享策略。
Superior Scheduler采取不同的方法。在每个调度周期中,Superior
Scheduler将遍历租户,并尝试基于多租户策略重新达到平衡,且尝试满足所 有策略(reserve,min,share等),以便可以释放预留的资源,将可用资源 流向不同租户下的其他本应得到资源的container。
● 动态队列状态控制(Open/Closed/Active/Inactive)
支持多个队列状态,有助于管理员操作和维护多个租户。
– Open状态(Open/Closed):如果是Open(默认)状态,将接受提交到此 队列的应用程序,如果是Closed状态,则不接受任何应用程序。
– Active状态(Active/Inactive):如果处于Active(默认)状态,租户内的应 用程序是可以被调度和分配资源。如果处于Inactive状态则不会进行调度。
● 应用等待原因
如果应用程序尚未启动,则提供作业等待原因信息。
Superior Scheduler和YARN开源调度器作了对比分析,如表5-29所示:
表5-29 对比分析
领域 YARN开源调度器 Superior Scheduler
多租户调 度
在同构集群上,只能选择容量调 度器(Capacity Scheduler)或 公平调度器(Fair Scheduler)两 者之一,且集群当前不支持公平 调度器(Fair Scheduler)。容量 调度器只支持百分比方式配置,
领域 YARN开源调度器 Superior Scheduler
不支持 Superior Scheduler在调度时考虑
机器的负载和资源分配情况,做到
字default、others。
作业等待 原因
不支持 作业等待原因信息可显示为什么作
业需等待。
综上所述,Superior Scheduler是一个高性能调度器,拥有丰富的调度策略,在功能、
性能、资源利用率和扩展性方面都优于Capacity Scheduler。
支持 CPU 硬隔离
YARN无法严格控制每个container使用的CPU资源。在使用CPU子系统时,container 可能会超额占用资源。所以,我们使用CPUset控制资源分配。
为了解决这个问题,CPU将会被严格按照虚拟核和物理核的比例分配至各个 container。如果container需要一整个物理核,则分配给它一整个物理核。若
container只需要部分物理核,则可能发生几个container共享同一个物理核的情况。下 图为CPU配额示例,假定虚拟核和物理核的比例为2:1。
图5-135 CPU 配额
YARN 开源增强特性:重启性能优化
一般情况下,RM恢复会获取正在运行和已完成的应用。而大量的已完成的应用可能导
一般情况下,RM恢复会获取正在运行和已完成的应用。而大量的已完成的应用可能导