如何在hadoopmapreduce/yarn中设置vcore?

vuktfyat  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(1129)

以下是我的配置:


**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集群中的vcore显示8gb,但是我不知道如何计算或者在哪里配置它。
希望有人能帮我。

qc6wkl3g

qc6wkl3g1#

我不小心遇到了这个问题,我最终设法找到了我需要的答案,所以我会尽量提供一个完整的答案。
实体和它们之间的关系对于每个hadoop应用程序/作业,您都有一个与resourcemanager就集群上的可用资源进行通信的应用程序主机。resourcemanager从每个nodemanager接收关于每个节点上可用资源的信息。这些资源称为容器(内存和cpu)。有关更多信息,请参见此。
集群上的资源声明每个节点管理器提供关于其可用资源的信息。相关设置为 yarn.nodemanager.resource.memory-mb 以及 yarn.nodemanager.resource.cpu-vcores$HADOOP_CONF_DIR/yarn-site.xml . 它们声明可以分配给容器的内存和CPU。
为您的作业请求资源您可以配置每个map/reduce所需的资源。这可以按如下方式进行(这是针对map任务的)。

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

这将要求4个虚拟核心和2048mb的内存为每个Map任务。
您还可以使用与属性相同的方式配置应用程序主控形状所需的资源 yarn.app.mapreduce.am.resource.mb 以及 yarn.app.mapreduce.am.resource.cpu-vcores .
这些属性在中可以有默认值 $HADOOP_CONF_DIR/mapred-default.xml .
对于更多的选项和默认值,我建议您看看这个和这个

fcy6dtqo

fcy6dtqo2#

yarn.nodemanager.resource.cpu-vcores—可分配给容器的cpu核心数。
mapreduce.map.cpu.vcores—为作业的每个Map任务分配的虚拟cpu内核数
mapreduce.reduce.cpu.vcores—作业的每个reduce任务的虚拟cpu内核数

x0fgdtte

x0fgdtte3#

简短的回答
如果您只是在单节点集群甚至是小型个人分布式集群上开箱即用地运行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。如果您想了解更多信息,请点击本页。

相关问题