如何在hadoop mapreduce / yarn中设置VCORES?

时间:2014-10-23 07:12:30

标签: hadoop mapreduce yarn hcatalog

以下是我的配置:

**mapred-site.xml**
map-mb : 4096 opts:-Xmx3072m
reduce-mb : 8192 opts:-Xmx6144m

**yarn-site.xml**
resource memory-mb : 40GB
min allocation-mb : 1GB

hadoop集群中的Vcores显示8GB,但我不知道如何计算或在何处配置它。

希望有人可以帮助我。

3 个答案:

答案 0 :(得分:7)

简答

如果您只是在单节点群集或甚至小型个人分布式群集上运行hadoop,那么这很可能并不重要。你只需要担心记忆。

长答案

vCores用于较大的群集,以限制不同用户或应用程序的CPU。如果您自己使用YARN,则没有理由限制容器CPU。这就是为什么在Hadoop中默认不考虑vCore的原因!

尝试将可用的nodemanager vcores设置为1.这没关系!您的容器数量仍然是2或4 ..或任何值:

yarn.nodemanager.resource.memory-mb / mapreduce.[map|reduce].memory.mb

如果确实需要考虑vCores的容器数量并受到以下限制:

yarn.nodemanager.resource.cpu-vcores / mapreduce.[map|reduce].cpu.vcores

然后您需要使用不同的不同资源计算器。转到您的capacity-scheduler.xml配置并将 DefaultResourceCalculator 更改为 DominantResourceCalculator

除了使用vCores进行容器分配外,还想使用vCore来真正限制每个节点的CPU使用率吗?您需要更改更多配置才能使用 LinuxContainerExecutor 而不是 DefaultContainerExecutor ,因为它可以管理用于限制CPU资源的linux cgroup。如果您想了解更多信息,请关注this page

答案 1 :(得分:4)

yarn.nodemanager.resource.cpu-vcores - 可以为容器分配的CPU核心数。

mapreduce.map.cpu.vcores - 为作业的每个地图任务分配的虚拟CPU核心数

mapreduce.reduce.cpu.vcores - 作业的每个reduce任务的虚拟CPU核心数

答案 2 :(得分:3)

我偶然遇到了这个问题,最终我找到了我需要的答案,所以我会尝试提供一个完整的答案。

实体及其关系对于每个hadoop应用程序/作业,您都有一个Application Master,它与ResourceManager就集群上的可用资源进行通信。 ResourceManager从每个NodeManager接收有关每个节点上的可用资源的信息。资源称为容器(内存和CPU)。有关更多信息,请参阅this

群集上的资源声明每个NodeManager都提供有关其可用资源的信息。 yarn.nodemanager.resource.memory-mb中的相关设置为yarn.nodemanager.resource.cpu-vcores$HADOOP_CONF_DIR/yarn-site.xml。它们声明了可以分配给容器的内存和cpu。

询问资源对于您的工作,您可以配置每个地图/缩减所需的资源。这可以按如下方式完成(这适用于地图任务)。

conf.set("mapreduce.map.cpu.vcores", "4");
conf.set("mapreduce.map.memory.mb", "2048");

这将为每个地图任务要求4个虚拟核心和2048MB内存。

您还可以使用属性yarn.app.mapreduce.am.resource.mbyarn.app.mapreduce.am.resource.cpu-vcores以相同的方式配置Application Master所需的资源。

这些属性可以在$HADOOP_CONF_DIR/mapred-default.xml中具有默认值。

有关更多选项和默认值,我建议您查看thisthis