以下是我的配置:
**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,但我不知道如何计算或在哪里配置它。
希望有人能帮助我。
以下是我的配置:
**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,但我不知道如何计算或在哪里配置它。
希望有人能帮助我。
简答
如果您只是在单节点集群甚至小型个人分布式集群上开箱即用地运行 hadoop,这很可能无关紧要。你只需要担心内存。
长答案
vCore 用于较大的集群,以限制不同用户或应用程序的 CPU。如果您自己使用 YARN,则没有真正的理由限制您的容器 CPU。这就是为什么在 Hadoop 中默认情况下甚至不考虑 vCore 的原因!
尝试将可用的 nodemanager vcores 设置为 1。没关系!您的容器数量仍将是 2 或 4 .. 或任何值:
yarn.nodemanager.resource.memory-mb
/mapreduce.[map|reduce].memory.mb
如果确实希望容器数量考虑 vCore 并受到以下限制:
yarn.nodemanager.resource.cpu-vcores
/mapreduce.[map|reduce].cpu.vcores
那么您需要使用不同的不同资源计算器。转到您的capacity-scheduler.xml
配置并将DefaultResourceCalculator更改为DominantResourceCalculator。
除了使用 vCore 进行容器分配之外,您还想使用 vCore 来真正限制每个节点的 CPU 使用率吗?您需要更改更多配置以使用LinuxContainerExecutor而不是DefaultContainerExecutor,因为它可以管理用于限制 CPU 资源的 linux cgroup。如果您想了解更多信息,请关注此页面。
yarn.nodemanager.resource.cpu-vcores - 可以为容器分配的 CPU 核心数。
mapreduce.map.cpu.vcores - 为作业的每个映射任务分配的虚拟 CPU 核心数
mapreduce.reduce.cpu.vcores - 作业的每个 reduce 任务的虚拟 CPU 核心数
我偶然遇到了这个问题,最终我设法找到了我需要的答案,所以我会尽力提供一个完整的答案。
实体及其关系对于每个 hadoop 应用程序/作业,您都有一个 Application Master 与 ResourceManager 就集群上的可用资源进行通信。ResourceManager 从每个 NodeManager 接收有关每个节点上可用资源的信息。这些资源称为容器(内存和 CPU)。有关更多信息,请参阅此。
集群上的资源声明每个 NodeManager 都提供有关其可用资源的信息。相关设置为yarn.nodemanager.resource.memory-mb
和yarn.nodemanager.resource.cpu-vcores
。$HADOOP_CONF_DIR/yarn-site.xml
它们声明了可以分配给容器的内存和 CPU。
请求资源对于您的工作,您可以配置每个 map/reduce 需要哪些资源。这可以按如下方式完成(这是用于地图任务)。
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
.
这些属性可以在$HADOOP_CONF_DIR/mapred-default.xml
.