扩展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);



目录
相关文章
|
10月前
|
资源调度 分布式计算 Java
Yarn资源调度器
Yarn资源调度器
50 0
|
2月前
|
资源调度 分布式计算 安全
YARN的FIFO调度器和Capacity Scheduler调度器在资源分配上有何区别?
【6月更文挑战第20天】YARN的FIFO调度器和Capacity Scheduler调度器在资源分配上有何区别?
41 11
|
2月前
|
分布式计算 资源调度 数据处理
YARN支持哪些非基于MapReduce的计算模型?
【6月更文挑战第19天】YARN支持哪些非基于MapReduce的计算模型?
44 11
|
1月前
|
SQL 资源调度 关系型数据库
实时计算 Flink版产品使用问题之在使用Flink on yarn模式进行内存资源调优时,如何进行优化
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
消息中间件 资源调度 Oracle
实时计算 Flink版产品使用合集之使用yarn-session的模式来提交任务,空间的资源是否释放给yarn
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
消息中间件 资源调度 分布式计算
实时计算 Flink版产品使用合集之1.13版本上部署一个flink1.17为什么任务启动一直accepted状态yarn的,有什么排查方向吗资源什么的都是充足的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
资源调度 大数据 调度
【云计算与大数据技术】集群资源统一管理系统YARN、Mesos、Omega讲解(图文解释 超详细)
【云计算与大数据技术】集群资源统一管理系统YARN、Mesos、Omega讲解(图文解释 超详细)
169 2
|
10月前
|
SQL 资源调度 分布式计算
聊聊 yarn 的三种资源调度器和公平调度器的最佳配置实践
聊聊 yarn 的三种资源调度器和公平调度器的最佳配置实践
|
资源调度 调度 容器
Hadoop3.0Yarn添加网络、磁盘IO等资源资料汇总及实战配置遇到的问题和解决办法
Hadoop3.0Yarn添加网络、磁盘IO等资源资料汇总及实战配置遇到的问题和解决办法
194 0
|
资源调度 Shell API
Hadoop3.0扩展Yarn资源模型详解2:资源Profiles说明
Hadoop3.0扩展Yarn资源模型详解2:资源Profiles说明
117 0