Spark on Yarn内存(物理+虚拟)使用情况

时间:2017-09-11 09:48:23

标签: unix apache-spark yarn ram virtual-memory

我很难理解内存管理如何与Spark on Yarn一起使用:

我的spark-submit

--executor-memory 48g
--num-executors 2

当我运行top -p <pids_of_2_yarn_containers/executors>

VIRT    RES   %MEM
51.059g 0.015t ~4    (container 1)
51.039g 0.012t ~3    (container 2)

系统总内存为380g。

最后,在YARN点击每个容器页面时,我可以看到:

Resource: 54272 Memory (container 1)
Resource: 54272 Memory (container 2)

为什么上述每个指标都没有加起来?我在每个spark执行器上请求48g,但是YARN显示54g,OS报告使用了15gb物理内存(顶部的RES列)和51g虚拟内存(VIRT列)。

1 个答案:

答案 0 :(得分:1)

在yarn-site.xml中

yarn.scheduler.minimum-allocation-mb(此值根据群集ram容量而变化) - RM上每个容器请求的最小分配,以MB为单位。低于此值的内存请求将不会生效,指定的值将以最小值分配,类似的最大容器大小<​​/ p>

yarn.scheduler.maximum-allocation-mb(此值根据群集ram容量而变化) - RM中每个容器请求的最大分配,以MB为单位。高于此值的内存请求不会生效,并且会限制为此值

yarn.nodemanager.resource.memory-mb - 可以为容器分配的物理内存量(MB)。

yarn.nodemanager.vmem-pmem-ratio - 每个Map和Reduce任务的虚拟内存(物理+分页内存)上限由允许每个YARN Container的虚拟内存比率决定。这由以下配置设置,默认值为2.1

yarn.nodemanager.resource.cpu-vcores - 此属性控制每个节点上容器使用的最大内核总数。

在mapred-site.xml中

mapreduce.map.memory.mb - 每个地图任务将使用的最大内存。

mapreduce.reduce.memory.mb - 每个reduce任务将使用的最大内存。

mapreduce.map.java.opts - 地图任务的JVM堆大小。

mapreduce.reduce.java.opts - 地图任务的JVM堆大小。

Spark设置

--executor-memory / spark.executor.memory控制执行程序堆大小,但JVM也可以使用堆内存,例如对于实例化的字符串和直接字节缓冲区。 spark.yarn.executor.memoryOverhead属性的值将添加到执行程序内存中,以确定每个执行程序对YARN的完整内存请求。默认为max(384,.07 * spark.executor.memory)

--num-executors命令行标志或spark.executor.instances配置属性控制请求的执行程序数

那么你可以指定上面提到的所有这些参数的值。在你的情况下,它将有助于计算内存分配。