Hadoop3.0扩展Yarn资源模型详解2:资源Profiles说明

简介: Hadoop3.0扩展Yarn资源模型详解2:资源Profiles说明

资源Profiles说明


由于YARN添加了对其他资源类型的支持,指定和配置Container的资源分配变得越来越麻烦。 我们建议resource-profiles作为一个解决方案,允许用户提交作业,以方便地指定他们所需要的资源。

对于每种资源类型,管理员必须在yarn-site.xml中指定最小和最大分配,最终导致yarn-site.xml中的许多最小和最大分配属性。

在memory和vcores的情况下,最小分配也作为分配计算的步骤。 虽然这适用于memory 和 vcores,但未来可能不适用于资源类型。

另外,最小分配也起着默认分配的作用可能适合memory和vcores,但可能不适合其他资源类型。

从最终用户的角度来看,当前模型意味着指定调度程序知道的每个资源,特别是如果最小分配不满足可能导致请求超额资源的需求(在用户不知道其确切数量的情况下)。 如果调度器添加新的资源类型(例如,打开cpu调度的内存调度集群),现在用户必须为他的job找出vCore的正确值,而这个job目前运行良好,这将变得特别麻烦。Resource profiles解决此问题

从本质上讲,我们允许集群管理员设置一个配置文件(“resource-profiles.xml“),可以让他们创建特定资源配置文件的简写。 再次,像这些配置文件“resource-types.xml”和“node-resources.xml”可以指定为“yarn-site.xml”的一部分。 这样的文件的一个例子:

<configuration>
<property>
<name>yarn.scheduler.profiles</name>
<value>pf1,pf2,pf3,pf4,pf5,pf6</value>
</property>
<property>
<name>yarn.scheduler.profile.pf1.name</name>
<value>minimum</value>
</property>
<!set value for memory >
<property>
<name>yarn.scheduler.profile.pf1.yarn.io/memory</name>
<value>1024</value>
</property>
<!set value for cpu >
<property>
<name>yarn.scheduler.profile.pf1.yarn.io/cpu</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.profile.pf2.name</name>
<value>maximum</value>
</property>
<!set value for memory >
<property>
<name>yarn.scheduler.profile.pf2.yarn.io/memory</name>
<value>8192</value>
</property>
<!set value for cpu >
<property>
<name>yarn.scheduler.profile.pf2.yarn.io/cpu</name>
<value>8</value>
</property>
<property>
<name>yarn.scheduler.profile.pf3.name</name>
<value>default</value>
</property>
<!set value for memory >
<property>
<name>yarn.scheduler.profile.pf3.yarn.io/memory</name>
<value>2048</value>
</property>
<!set value for cpu >
<property>
<name>yarn.scheduler.profile.pf3.yarn.io/cpu</name>
<value>2</value>
</property>
<property>
<name>yarn.scheduler.profile.pf4.name</name>
<value>small</value>
</property>
<!set value for memory >
<property>
<name>yarn.scheduler.profile.pf4.yarn.io/memory</name>
<value>1024</value>
</property>
<!set value for cpu >
<property>
<name>yarn.scheduler.profile.pf4.yarn.io/cpu</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.profile.pf5.name</name>
<value>medium</value>
</property>
<!set value for memory >
<property>
<name>yarn.scheduler.profile.pf5.yarn.io/memory</name>
<value>3072</value>
</property>
<!set value for cpu >
<property>
<name>yarn.scheduler.profile.pf5.yarn.io/cpu</name>
<value>3</value>
</property>
<property>
<name>yarn.scheduler.profile.pf6.name</name>
<value>large</value>
</property>
<!set value for memory >
<property>
<name>yarn.scheduler.profile.pf6.yarn.io/memory</name>
<value>8192</value>
</property>
<!set value for cpu >
<property>
<name>yarn.scheduler.profile.pf6.yarn.io/cpu</name>
<value>8</value>
</property>
</configuration>

上面的文件格式有点繁琐。 这主要是由于YarnConfiguration类限制。 下面在“配置文件格式”一节中讨论了更易于理解的备用文件格式。

这个例子设置了3profiles “small”, “medium”, 和“large”.“minimum”,“maximum”和“default”是由YARN保留的配置文件,允许管理员为每个资源类型指定最小【minimum】,最大【maximum】和默认【default】的分配。

当用户提交作业时,他可以指定一个配置文件【profile】名称,而不是指定每个资源类型。 如果没有提到【profile】配置文件,则使用“默认”profile。

这种模式的好处是,如果管理员决定启用新的资源类型,用户将不需要更新他们所有的job,管理员应该能够配置更好的profile.。 它还使得用户更容易请求资源;他们(希望)最终将在分配上做出更好的决定,因为在各种云平台上部署实例时,它们用于指定profile名称。 当我们添加对网络和磁盘作为资源类型的支持时,这变得特别有用,用户可能难以指定确切的需求。

该模型最终将所有资源分配相关配置收集到单个文件中,从而更易于管理。

如果用户除了profile,之外还为内存和/或CPU指定分配,那么这被看作是覆盖。 在以上详述的配置文件示例的情况下,并且使用分布式shell作为示例应用程序时,“—container_memory 3072 —container_profile small”表示您希望分配具有3072MB和1个vCore的container。 这也意味着指定memory和/或vcores的现有作业在memory和/或vcores的分配中应该看不到变化。 这种重写行为将只允许memory和CPU来保存现有的行为。 具体来说,我们建议如果一个应用程序执行以下操作:

ResourceRequest remoteRequest = ResourceRequest.newInstance(priority,hostname, capability, numContainers);
Map<URI, ResourceMapEntry> overrides = new HashMap<>();
ResourceMapEntry value =ResourceMapEntry.newInstance(“yarn.io/memory”, 16 * 1024, “MB”,ResourceType.COUNTABLE);
overrides.put(new URI(“yarn.io/memory”, entry));
Resource profileCapabilitiesOverrides =Resource.newInstance(overrides);
// targetProfile is the name of the profileProfileCapability capability =ProfileCapability.newInstance(targetProfile,
profileCapabilitiesOverrides);
remoteRequest.setProfileCapability(capability);

那么RM分配的最终能力将是配置文件中指定的资源,除了分配的内存将是16GB。 但是,如果应用程序不能同时使用capabilities和配置文件模型。 如上所述,覆盖将只允许内存和CPU。 我们还提出了一个配置标志来启用/禁用【enable/disable】覆盖(默认设置为启用覆盖),使用管理员可以关闭覆盖行为。

YARN的变化主要是ResourceRequestProto

message ProfileCapabilityProto {
string profile = 1;
ResourceProto profileCapabilityOverride = 2;
}
message ResourceRequestProto {
optional PriorityProto priority = 1;
optional string resource_name = 2;
optional ResourceProto capability = 3;
optional int32 num_containers = 4;
optional bool relax_locality = 5 [default = true];
optional string node_label_expression = 6;
ProfileCapabilityProto string profile = 7;
}

还建议更改RegisterApplicationMasterResponse:

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;
repeated SchedulerResourceTypes scheduler_resource_types = 7;
optional ResourceProfilesProto resource_profiles = 8;
}

resourceprofilesproto定义在“Resource profiles API”部分。

当一个新的请求进入时,ApplicationMasterService查找注册profiles,,并使用profile中的设置来设置最终请求值。 这是在allocate(AllocateRequest request)函数本身完成的。 在进行完整性检查之前,在ResourceRequest中设置capability以考虑指定的配置文件【profiles】。 因此,我们不会预见对调度程序代码的其他方面的更改。

ClientRMService中必须执行类似的更改,以允许启动ApplicationMasters时使用配置文件【profiles】

Resource profiles API

为了让YARN客户端和应用程序masters知道可用配置文件列表,我们需要在RM中提供一个API。 建议添加以下API

Protocol Buffers
message ResourceProfileEntry {
string name = 1;
repeated ResourceProto resources = 2;
}
message ResourceProfilesProto {
repeated ResourceProfileEntry resource_profiles_map = 3;
}
RPC
class GetResourceProfilesRequest {
// empty class
}
class GetResourceProfilesResponse {
public Map<String, Map<URI, Long>> getAllResourceProfiles();
public Map<URI, Long> getResourceProfile(String profile);
}
GetProfilesResponse getResourceProfiles(GetProfilesRequest request)
REST
GET /resourceprofiles

配置文件格式

上述示例文件采用YarnConfiguration类当前使用的格式。 但是,所有的文件都可以用更简洁的方式来表达。 简明的形式如下。

“resource-types.xml”

<configuration>
<resource>
<name>yarn.io/memory</name>
<units>MB</units>
<type>countable</type>
<enabled>true</enabled>
</resource>
<resource>
<name>yarn.io/cpu</name>
<units>vcores</units>
<type>countable</type>
<enabled>true</enabled>
</resource>
<configuration>

“node-resources.xml”

<configuration>
<resource>
<name>yarn.io/memory</name>
<value>8192</value>
<units>MB</units>
<type>countable</type>
</resource>
<resource>
<name>yarn.io/cpu</name>
<units>vcores</units>
<type>countable</type>
<value>8</value>
</resource>
<configuration>

“resource-profiles.xml”

<configuration>
<profiles>
<profile>
<name>minimum</name>
<resource>
<name>yarn.io/memory</name>
<value>1024</value>
</resource>
<resource>
<name>yarn.io/cpu</name>
<value>1</value>
</resource>
</profile>
<profile>
<name>maximum</name>
<resource>
<name>yarn.io/memory</name>
<value>8192</value>
</resource>
<resource>
<name>yarn.io/cpu</name>
<value>8</value>
</resource>
</profile>
<profile>
<name>default</name>
<resource>
<name>yarn.io/memory</name>
<value>2048</value>
</resource>
<resource>
<name>yarn.io/cpu</name>
<value>2</value>
</resource>
</profile>
<profile>
<name>small</name>
<resource>
<name>yarn.io/memory</name>
<value>1024</value>
</resource>
<resource>
<name>yarn.io/cpu</name>
<value>1</value>
</resource>
</profile>
<profile>
<name>medium</name>
<resource>
<name>yarn.io/memory</name>
<value>3072</value>
</resource>
<resource>
<name>yarn.io/cpu</name>
<value>3</value>
</resource>
</profile>
<profile>
<name>large</name>
<resource>
<name>yarn.io/memory</name>
<value>8192</value>
</resource>
<resource>
<name>yarn.io/cpu</name>
<value>8</value>
</resource>
</profile>
</profiles>
<configuration>

“resource-profiles.json”

{
“minimum”: {
“yarn.io/memory”: 1024,
“yarn.io/cpu”: 1
},
“maximum”: {
“yarn.io/memory”: 8192,
“yarn.io/cpu”: 8
},
“default”: {
“yarn.io/memory”: 2048,
“yarn.io/cpu”: 2
},
“small”: {
“yarn.io/memory”: 1024,
“yarn.io/cpu”: 1
},
“medium”: {
“yarn.io/memory”: 3072,
“yarn.io/cpu”: 3
},
“large”: {
“yarn.io/memory”: 8192,
“yarn.io/cpu”: 8
}
}

目录
相关文章
|
1月前
|
分布式计算 资源调度 Hadoop
Hadoop YARN资源管理-容量调度器(Yahoo!的Capacity Scheduler)
详细讲解了Hadoop YARN资源管理中的容量调度器(Yahoo!的Capacity Scheduler),包括队列和子队列的概念、Apache Hadoop的容量调度器默认队列、队列的命名规则、分层队列、容量保证、队列弹性、容量调度器的元素、集群如何分配资源、限制用户容量、限制应用程序数量、抢占申请、启用容量调度器以及队列状态管理等方面的内容。
42 3
|
1月前
|
分布式计算 资源调度 Hadoop
Hadoop YARN资源管理-公平调度器(Fackbook的Fair Scheduler)
详细介绍了Hadoop YARN资源管理中的公平调度器(Fair Scheduler),包括其概述、配置、队列结构、以及如何将作业提交到指定队列,展示了公平调度器如何通过分配文件(fair-scheduler.xml)来控制资源分配,并提供了配置示例和如何通过命令行提交作业到特定队列的方法。
53 0
Hadoop YARN资源管理-公平调度器(Fackbook的Fair Scheduler)
|
2月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
101 0
|
2月前
|
资源调度 分布式计算 Hadoop
揭秘Hadoop Yarn背后的秘密!它是如何化身‘资源大师’,让大数据处理秒变高效大戏的?
【8月更文挑战第24天】在大数据领域,Hadoop Yarn(另一种资源协调者)作为Hadoop生态的核心组件,扮演着关键角色。Yarn通过其ResourceManager、NodeManager、ApplicationMaster及Container等组件,实现了集群资源的有效管理和作业调度。当MapReduce任务提交时,Yarn不仅高效分配所需资源,还能确保任务按序执行。无论是处理Map阶段还是Reduce阶段的数据,Yarn都能优化资源配置,保障任务流畅运行。此外,Yarn还在Spark等框架中展现出灵活性,支持不同模式下的作业执行。未来,Yarn将持续助力大数据技术的发展与创新。
31 2
|
2月前
|
图形学 C# 开发者
Unity粒子系统全解析:从基础设置到高级编程技巧,教你轻松玩转绚丽多彩的视觉特效,打造震撼游戏画面的终极指南
【8月更文挑战第31天】粒子系统是Unity引擎的强大功能,可创建动态视觉效果,如火焰、爆炸等。本文介绍如何在Unity中使用粒子系统,并提供示例代码。首先创建粒子系统,然后调整Emission、Shape、Color over Lifetime等模块参数,实现所需效果。此外,还可通过C#脚本实现更复杂的粒子效果,增强游戏视觉冲击力和沉浸感。
70 0
|
2月前
|
资源调度 分布式计算 监控
【揭秘Hadoop YARN背后的奥秘!】从零开始,带你深入了解YARN资源管理框架的核心架构与实战应用!
【8月更文挑战第24天】Hadoop YARN(Yet Another Resource Negotiator)是Hadoop生态系统中的资源管理器,为Hadoop集群上的应用提供统一的资源管理和调度框架。YARN通过ResourceManager、NodeManager和ApplicationMaster三大核心组件实现高效集群资源利用及多框架支持。本文剖析YARN架构及组件工作原理,并通过示例代码展示如何运行简单的MapReduce任务,帮助读者深入了解YARN机制及其在大数据处理中的应用价值。
53 0
|
1月前
|
资源调度 分布式计算 Hadoop
YARN(Hadoop操作系统)的架构
本文详细解释了YARN(Hadoop操作系统)的架构,包括其主要组件如ResourceManager、NodeManager和ApplicationMaster的作用以及它们如何协同工作来管理Hadoop集群中的资源和调度作业。
37 3
YARN(Hadoop操作系统)的架构
|
1月前
|
资源调度 分布式计算 Hadoop
使用YARN命令管理Hadoop作业
本文介绍了如何使用YARN命令来管理Hadoop作业,包括查看作业列表、检查作业状态、杀死作业、获取作业日志以及检查节点和队列状态等操作。
33 1
使用YARN命令管理Hadoop作业
|
2月前
|
资源调度 分布式计算 算法
【揭秘Yarn调度秘籍】打破资源分配的枷锁,Hadoop Yarn权重调度全攻略!
【8月更文挑战第24天】在大数据处理领域,Hadoop Yarn 是一种关键的作业调度与集群资源管理工具。它支持多种调度器以适应不同需求,默认采用FIFO调度器,但可通过引入基于权重的调度算法来提高资源利用率。该算法根据作业或用户的权重值决定资源分配比例,权重高的可获得更多计算资源,特别适合多用户共享环境。管理员需在Yarn配置文件中启用特定调度器(如CapacityScheduler),并通过设置队列权重来实现资源的动态调整。合理配置权重有助于避免资源浪费,确保集群高效运行,满足不同用户需求。
37 3
|
5月前
|
资源调度 分布式计算 Hadoop
Hadoop Yarn 核心调优参数
这是一个关于测试集群环境的配置说明,包括3台服务器(master, slave1, slave2)运行CentOS 7.5,每台有4核CPU和4GB内存。集群使用Hadoop 3.1.3,JDK1.8。Yarn核心配置涉及调度器选择、ResourceManager线程数、节点检测、逻辑处理器使用、核心转换乘数、NodeManager内存和CPU设置,以及容器的内存和CPU限制。配置完成后,需要重启Hadoop并检查yarn配置。

相关实验场景

更多
下一篇
无影云桌面