Spark Yarn 内存配置
Spark Yarn Memory configuration
我有一个 spark 应用程序,它一直因错误而失败:
"Diagnostics: Container [pid=29328,containerID=container_e42_1512395822750_0026_02_000001] is running beyond physical memory limits. Current usage: 1.5 GB of 1.5 GB physical memory used; 2.3 GB of 3.1 GB virtual memory used. Killing container."
我看到许多不同的参数建议更改以增加物理内存。可以请我对以下参数进行一些解释吗?
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(运行 yarn-cluster
部署模式)。
spark.driver.memory
spark.executor.memory
这些控制 spark 将尝试为其驱动程序和所有执行程序分配的基本内存量。如果您 运行 内存不足,这些可能是您想要增加的。
// options before Spark 2.3.0
spark.yarn.driver.memoryOverhead
spark.yarn.executor.memoryOverhead
// options after Spark 2.3.0
spark.driver.memoryOverhead
spark.executor.memoryOverhead
此值是当您 运行 Spark on yarn 时请求的额外内存量。它旨在考虑托管 Spark 执行器的纱线容器所需的额外 RAM。
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
当 Spark 要求 Yarn 为执行程序保留一块 RAM 时,它会询问基本内存加上开销内存的值。然而,Yarn 可能不会返回一个恰好那个尺寸的。这些参数控制 YARN 将授予的最小容器大小和最大容器大小。如果您只将集群用于一项工作,我发现最简单的方法是将它们设置为非常小和非常大的值,然后使用上面提到的 spark 内存设置来设置真实的容器大小。
mapreduce.map.memory.mb
mapreduce.map.memory.mb
mapreduce.map.java.opts/mapreduce.reduce.java.opts
我认为这些对您的 Spark/Yarn 工作没有任何影响。
我有一个 spark 应用程序,它一直因错误而失败:
"Diagnostics: Container [pid=29328,containerID=container_e42_1512395822750_0026_02_000001] is running beyond physical memory limits. Current usage: 1.5 GB of 1.5 GB physical memory used; 2.3 GB of 3.1 GB virtual memory used. Killing container."
我看到许多不同的参数建议更改以增加物理内存。可以请我对以下参数进行一些解释吗?
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(运行 yarn-cluster
部署模式)。
spark.driver.memory
spark.executor.memory
这些控制 spark 将尝试为其驱动程序和所有执行程序分配的基本内存量。如果您 运行 内存不足,这些可能是您想要增加的。
// options before Spark 2.3.0
spark.yarn.driver.memoryOverhead
spark.yarn.executor.memoryOverhead
// options after Spark 2.3.0
spark.driver.memoryOverhead
spark.executor.memoryOverhead
此值是当您 运行 Spark on yarn 时请求的额外内存量。它旨在考虑托管 Spark 执行器的纱线容器所需的额外 RAM。
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
当 Spark 要求 Yarn 为执行程序保留一块 RAM 时,它会询问基本内存加上开销内存的值。然而,Yarn 可能不会返回一个恰好那个尺寸的。这些参数控制 YARN 将授予的最小容器大小和最大容器大小。如果您只将集群用于一项工作,我发现最简单的方法是将它们设置为非常小和非常大的值,然后使用上面提到的 spark 内存设置来设置真实的容器大小。
mapreduce.map.memory.mb
mapreduce.map.memory.mb
mapreduce.map.java.opts/mapreduce.reduce.java.opts
我认为这些对您的 Spark/Yarn 工作没有任何影响。