以下是我的配置:
**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,但我不知道如何计算或在何处配置它。
希望有人可以帮助我。答案 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.mb
和yarn.app.mapreduce.am.resource.cpu-vcores
以相同的方式配置Application Master所需的资源。
这些属性可以在$HADOOP_CONF_DIR/mapred-default.xml
中具有默认值。