我有一个火花应用程序,在出现错误时失败“诊断:容器[pid = 29328,containerID = container_e42_1512395822750_0026_02_000001]正在超出物理内存限制。当前使用情况:1.5 GB的1.5 GB物理内存使用; 2.3 GB的3.1 GB使用虚拟内存。杀死容器。“
我看到了许多不同的参数,建议改变以增加物理内存。 我能否对每个人的确切解释是什么意思以及它的影响。
mapreduce.map.memory.mb(当前设置为0所以假设采用默认值1GB,那么为什么我们将其视为1.5 GB,更改它也会影响数字)
mapreduce.reduce.memory.mb(当前设置为0所以假设采用默认值为1GB,那么为什么我们将其视为1.5 GB,更改它也会影响数字)
mapreduce.map.java.opts / mapreduce.reduce.java.opts设置为前一个数字的80%
yarn.scheduler.minimum-allocation-mb = 1GB(当更改此值时,我会看到对最大物理内存的影响,但是对于1 GB的值,它仍然是1.5G)
yarn.app.mapreduce.am.resource.mb / spark.yarn.executor.memoryOverhead可以在任何配置中找到。
我们使用cloudera CDH 5.12.1定义YARN(使用纱线群集运行)
我会很感激所有参数中的一些人。
答案 0 :(得分:1)
spark.driver.memory
spark.executor.memory
这些控制内存spark的基本数量将尝试为其驱动程序和所有执行程序分配。如果你的内存不足,这些可能是你想要增加的。
spark.yarn.executor.memoryOverhead
此值是在纱线上运行Spark时要求的额外内存量。它旨在计算托管Spark Executors的纱线容器所需的额外RAM。
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
当Spark要求Yarn为执行程序保留一块RAM时,它会询问基本内存的值和开销内存。但是,Yarn可能不会给它一个正好相同的尺寸。这些参数控制YARN将授予的最小容器大小和最大容器大小。如果您只将群集用于一个作业,我发现最简单的方法是将它们设置为非常小且非常大的值,然后使用上面提到的火花记忆设置来设置真正的容器大小。
mapreduce.map.memory.mb
mapreduce.map.memory.mb
mapreduce.map.java.opts/mapreduce.reduce.java.opts
我认为这些与你的Spark / Yarn工作无关。