扩展Yarn资源模型详解1

简介: 扩展Yarn资源模型详解1

概述



当前Yarn支持各种资源类型:比如:

disk( YARN2139),https://issues.apache.org/jira/browse/yarn-2139

network( YARN2140), https://issues.apache.org/jira/browse/YARN-2140

和HDFS bandwidth( YARN2681).https://issues.apache.org/jira/browse/YARN-2681


本文档提出了将YARN资源模型扩展为更加灵活的模型,使其更容易添加新的countable类型的资源。它还考虑了“resource profiles”的相关方面,这些资源配置文件允许用户容易地指定它们需要的容器资源。当添加对新资源类型的支持时,有两个方面需要考虑调度和隔离。 本文档仅涉及调度方面。


背景



在YARN中添加一个新的countable资源类型是一个相当复杂的过程。 需要进行大量的工作来修改ProtocolBuffers文件以及相应的Java源代码。 这必须通过修改 DominantResourceCalculator类添加对新资源类型的支持。 另外,许多不相关的测试用例都必须修改,因为他们使用了esource.newInstance(memory,,vcores))函数。此外,大多数新的资源类型被视为相同,只是名称不同而已。 总而言之,需要修改37个源文件来增加对新磁盘资源类型的支持;而对于未来的资源类型,类似的(可能更大的)将不得不进行修改,而且大部分更改将与之前的更改相同, 唯一的区别是变量的名称。

我们建议更改资源模型以支持可由群集管理员定义的任意、countable资源。 当我们谈到countable资源时,我们指的是资源的分配和释放是一个简单的减法和加法操作的资源类型。 我们不会在此版本的文档中涵盖专用资源,如端口【ports】或不可数量【noncountable】的资源(如标签)。 然而,我们的建议并没有排除增加对标签等资源类型的支持,这种工作可以作为未来工作的一部分来进行。


扩展YARN资源模


ResourceManager

在我们提出的模型中,我们添加一个新的配置文件“resourcetypes.xml“,管理员可以使用它来添加新的资源类型。 ResourceManager(RM)“resource-types.xml”来确定启用调度的资源类型集合。 这些配置可以在yarn-site.xml配置,但是在一个单独的文件中指定它们可能会更清晰。 资源配置文件必须包含内存和vcore作为资源类型以防止功能的任何损失。 管理员可以添加任意新的资源类型,只要他们代表的资源是countable。


resource-types.xml样例如下

<configuration>
<property>
<name>yarn.scheduler.resourcetypes</name>
<value>memory,cpu</value>
</property>
<property>
<name>yarn.scheduler.resourcetypes.memory.name</name>
<value>yarn.io/memory</value>
</property>
<property>
<name>yarn.scheduler.resourcetypes.memory.units</name>
<value>MB</value>
</property>
<property>
<name>yarn.scheduler.resourcetypes.memory.type</name>
<value>countable</value>
</property>
<property>
<name>yarn.scheduler.resourcetypes.memory.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.scheduler.resourcetypes.cpu.name</name>
<value>yarn.io/cpu</value>
</property>
<property>
<name>yarn.scheduler.resourcetypes.cpu.units</name>
<value>vcores</value>
</property>
<property>
<name>yarn.scheduler.resourcetypes.cpu.type</name>
<value>countable</value>
</property>
<property>
<name>yarn.scheduler.resourcetypes.cpu.enabled</name>
<value>true</value>
</property>
<configuration>

“yarn.io/memory”和“yarn.io/cpu”映射到YARN当前支持的现有内存和vcore资源类型。 资源名称与Kubernetes资源模型中的资源名称相似(链接位于参考部分)。


NodeManager

类似的,我们建议添加一个新的文件“nodere-sources.xml“,来指定节点的资源使用量。跟“resource-type.xml”类似,这些配置可以在yarn-site.xml文件中设置。但是在单独的文件中指定它们可能会更清晰。


下面是node-resources.xml样例


<configuration>
<property>
<name>yarn.nodemanager.resourcetypes</name>
<value>memory,cpu</value>
</property>
<property>
<name>yarn.nodemanager.resourcetypes.memory.name</name>
<value>yarn.io/memory</value>
</property>
<property>
<name>yarn.nodemanager.resourcetypes.memory.units</name>
<value>MB</value>
</property>
<property>
<name>yarn.nodemanager.resourcetypes.memory.type</name>
<value>countable</value>
</property>
<property>
<name>yarn.nodemanager.resourcetypes.memory.available</name>
<value>32</value>
<property>
<name>yarn.nodemanager.resourcetypes.cpu</name>
<value>yarn.io/cpu</value>
</property>
<property>
<name>yarn.nodemanager.resourcetypes.cpu.units</name>
<value>vcores</value>
</property>
<property>
<name>yarn.nodemanager.resourcetypes.cpu.type</name>
<value>countable</value>
</property>
<property>
<name>yarn.nodemanager.resourcetypes.cpu.available</name>
<value>8</value>
</property>
<configuration>

NodeStatusUpdaterImpl类将被修改为报告“noderesources.xml”文件中指定的所有资源的值,而不仅仅是当前的内存和CPU


Resource类和DominantResourceCalculator
建议在Yarn的资源模型添加新的函数。


public static Resource newInstance(Map<ResourceTypeInformation, Long>
resources)

弃用


public static Resource newInstance(int memory, int vcores)

ResourceTypeInformation类的定义是:


public class ResourceTypeInformation {
URI name;
String units;
ResourceTypes type;
Boolean enabled;
}



其中resource-types是可能资源类型的枚举(“countable”“是目前唯一支持的类型)。 另一个限制是“name”字段必须是唯一的。 name字段将作为标识符。 这是为了避免两个资源类型具有相同的名称但不同的单位或类型而导致混淆的情况。 “enabled””字段允许管理员轻松启用或禁用资源类型。 目前,“units”字段有两个目的:


1.它将在NM注册期间使用,以确保RM和NM使用相同的单元。

2.文档


ProtocolBuffers定义的相应改变是:



enum ResourceTypes {COUNTABLE = 0;
}
message ResourceMapEntry {
string key = 1;
int64 value = 2;
string units = 3;
ResourceTypes type = 4;
}
message ResourceProto {
optional int32 memory = 1;
optional int32 virtual_cores = 2;
optional repeated ResourceMapEntry resource_value_map = 3;
}



当NM向RM注册时,如果“resourcetypes.xml”中列出的资源类型与NM报告的资源(缺少资源类型,附加资源类型,不匹配单元,不匹配类型等)不匹配,则会引发异常 NM关闭。 应该注意的是,“noderesources.xml”没有“enabled”字段。 这是因为如果一个资源类型被启用或者不启用,那么它应该与NM无关。

存在的内存和CPU资源类型将分别映射到“yarn.io/memory”和“yarn.io/cpu”。 为了保持兼容性并确保功能没有丢失,“yarn.io/memory”和“yarn.io/cpu”将被指定为强制资源类型。 使用URI作为资源类型名称的决定是从Kubernetes派生的,它建议使用符合RFC 1123的域后跟“/”后,跟一个名称。


已经存在的Resource.newInstance(int memory, int vcores) 函数,将会改变切换为Resource.newInstance(Map)函数。已经存在的getMemory(), setMemory(int memory), getVirtualCores(), setVirtualCores(int vCores) 函数。行为没有任何的变化,可以继续工作。在内部,这些调用将被映射为读/写“yarn.io/memory”和“yarn.io/cpu”元素。 Resource类中的hashCode函数将不得不进行修改,以考虑所有的资源类型。


DominantResourceCalculator将改变为执行具有在Map中启用标志设置的每个资源类型的计算,而不是当前命名变量。


NodeStatusUpdaterImpl

今天,NMs将资源报告给NodeStatusUpdaterImpl中的RM。 一旦我们允许任意资源类型,NodeStatusUpdaterImpl将不得不读取“node-resources.xml”文件并报告在该文件中设置的资源值。


另外,可能会出现资源类型值的情况.需要访问节点资源(如/ proc文件系统)。 为了达到这个目的,我们需要修改NM来允许插件读取和处理这些信息。 目前,我们不打算为此增加支持。 但是,如果有强烈需求,必须加以支持,我们愿意接受。



添加或删除资源类型

由于新的配置文件和建议系统的结构方式,在添加或删除资源类型时,操作顺序非常重要。


当添加新的资源类型时,必须首先升级NM,然后再升级RM。 这就允许NM向RM注册而不会导致不匹配。


相反,在删除资源类型时,必须首先升级RM(删除资源类型),然后是NM。


RegisterApplicationMasterResponse
目前,我们在RegisterApplicationMasterResponse调度器中有一个字段resource_types可以被应用程序用来确定资源类型被RM用于调度。 但是,这个领域目前是一个枚举。我们建议弃用这个字段,并添加一个新的字段“scheduler_resource_types_info”,它将包含所有的信息为调度启用的资源类型。 建议的修改如下:


message RegisterApplicationMasterResponseProto {
optional ResourceProto maximumCapability = 1;
optional bytes client_to_am_token_master_key = 2;
repeated ApplicationACLMapProto application_ACLs = 3;
repeated ContainerProto containers_from_previous_attempts = 4;
optional string queue = 5;
repeated NMTokenProto nm_tokens_from_previous_attempts = 6;
// scheduer_resource_types is deprecated
repeated SchedulerResourceTypes scheduler_resource_types = 7;
repeated ResourceMapEntry sceduler_resource_types_info = 8;
}

将以下API添加到RegisterApplicationMasterResponse类:


public abstract Map<URI, ResourceTypeInformation>
getSchedulerResourceTypesInformation();
public abstract void setSchedulerResourceTypesInformation(Map<URI,
ResourceTypeInformation>);

我们建议弃用


public abstract EnumSet<SchedulerResourceTypes>
getSchedulerResourceTypes();


public abstract void
setSchedulerResourceTypes(EnumSet<SchedulerResourceTypes> types);



目录
相关文章
|
2月前
|
资源调度 分布式计算 大数据
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
120 0
|
4月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
315 0
|
4月前
|
资源调度 分布式计算 Hadoop
揭秘Hadoop Yarn背后的秘密!它是如何化身‘资源大师’,让大数据处理秒变高效大戏的?
【8月更文挑战第24天】在大数据领域,Hadoop Yarn(另一种资源协调者)作为Hadoop生态的核心组件,扮演着关键角色。Yarn通过其ResourceManager、NodeManager、ApplicationMaster及Container等组件,实现了集群资源的有效管理和作业调度。当MapReduce任务提交时,Yarn不仅高效分配所需资源,还能确保任务按序执行。无论是处理Map阶段还是Reduce阶段的数据,Yarn都能优化资源配置,保障任务流畅运行。此外,Yarn还在Spark等框架中展现出灵活性,支持不同模式下的作业执行。未来,Yarn将持续助力大数据技术的发展与创新。
71 2
|
4月前
|
资源调度 分布式计算 Hadoop
揭秘Hadoop Yarn三大调度器:如何玩转资源分配,实现高效集群管理?
【8月更文挑战第24天】Hadoop YARN(Another Resource Negotiator)是一款强大的集群资源管理工具,主要负责高效分配及管理Hadoop集群中的计算资源。本文深入剖析了YARN的三种调度器:容量调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)以及FIFO调度器,并通过具体的配置示例和Java代码展示了它们的工作机制。
101 2
|
4月前
|
图形学 C# 开发者
Unity粒子系统全解析:从基础设置到高级编程技巧,教你轻松玩转绚丽多彩的视觉特效,打造震撼游戏画面的终极指南
【8月更文挑战第31天】粒子系统是Unity引擎的强大功能,可创建动态视觉效果,如火焰、爆炸等。本文介绍如何在Unity中使用粒子系统,并提供示例代码。首先创建粒子系统,然后调整Emission、Shape、Color over Lifetime等模块参数,实现所需效果。此外,还可通过C#脚本实现更复杂的粒子效果,增强游戏视觉冲击力和沉浸感。
283 0
|
6月前
|
资源调度 分布式计算 安全
YARN的FIFO调度器和Capacity Scheduler调度器在资源分配上有何区别?
【6月更文挑战第20天】YARN的FIFO调度器和Capacity Scheduler调度器在资源分配上有何区别?
84 11
|
6月前
|
分布式计算 资源调度 数据处理
YARN支持哪些非基于MapReduce的计算模型?
【6月更文挑战第19天】YARN支持哪些非基于MapReduce的计算模型?
77 11
|
6月前
|
资源调度 分布式计算 Hadoop
YARN中的资源调度主要通过其调度器(Scheduler)实现
【6月更文挑战第20天】YARN中的资源调度主要通过其调度器(Scheduler)实现
85 5
|
6月前
|
资源调度 分布式计算 Hadoop
YARN中的资源调度
【6月更文挑战第19天】YARN中的资源调度
63 3
|
5月前
|
SQL 资源调度 关系型数据库
实时计算 Flink版产品使用问题之在使用Flink on yarn模式进行内存资源调优时,如何进行优化
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。