Spark容器超出物理限制运行

16 浏览
0 Comments

Spark容器超出物理限制运行

我一直在寻找解决以下问题的方法。我正在使用Scala 2.11.8和Spark 2.1.0

Application application_1489191400413_3294 failed 1 times due to AM Container for appattempt_1489191400413_3294_000001 exited with exitCode: -104
For more detailed output, check application tracking page:http://ip-172-31-17-35.us-west-2.compute.internal:8088/cluster/app/application_1489191400413_3294Then, click on links to logs of each attempt.
Diagnostics: Container [pid=23372,containerID=container_1489191400413_3294_01_000001] is running beyond physical memory limits. 
Current usage: 1.4 GB of 1.4 GB physical memory used; 3.5 GB of 6.9 GB virtual memory used. Killing container.

请注意,我已分配了比这里错误报告的1.4 GB更多的内存。由于我没有看到我的执行器失败,所以我从这个错误中得出的结论是驱动程序需要更多的内存。然而,我的设置似乎没有传播。

我将作业参数设置为yarn如下:

val conf = new SparkConf()
  .setAppName(jobName)
  .set("spark.hadoop.mapred.output.committer.class", "com.company.path.DirectOutputCommitter")
additionalSparkConfSettings.foreach { case (key, value) => conf.set(key, value) }
// this is the implicit that we pass around
implicit val sparkSession = SparkSession
  .builder()
  .appName(jobName)
  .config(conf)
  .getOrCreate()

其中additionalSparkConfSettings中的内存分配参数设置为以下代码段:

HashMap[String, String](
  "spark.driver.memory" -> "8g",
  "spark.executor.memory" -> "8g",
  "spark.executor.cores" -> "5",
  "spark.driver.cores" -> "2",
  "spark.yarn.maxAppAttempts" -> "1",
  "spark.yarn.driver.memoryOverhead" -> "8192",
  "spark.yarn.executor.memoryOverhead" -> "2048"
)

我的设置真的没有传播吗?还是我误解了日志?

谢谢!

admin 更改状态以发布 2023年5月22日
0
0 Comments

在我的情况下,问题很简单,尽管容易被忽视。

在代码中设置驱动程序级别的参数是无效的。因为到那时,显然已经太晚了,配置将被忽略。几个月前我解决这个问题时进行了几次测试,确认了这一点。

然而,执行器参数可以在代码中设置。但是,如果您在不同的地方设置相同的参数,请记住参数优先协议。

0
0 Comments

必须为执行程序和驱动程序分别设置超额内存,并且它应该是驱动程序和执行程序内存的一小部分。

spark.yarn.executor.memoryOverhead = executorMemory * 0.10, with minimum of 384 

要分配给每个执行程序的非堆内存量(以兆字节为单位)。这是一些如VM开销、国际字符串、其他本机开销等占用的内存。这通常随着执行程序的大小增长而增长(通常为6-10%)。

spark.yarn.driver.memoryOverhead = driverMemory * 0.10, with minimum of 384.

以集群模式下每个驱动程序要分配的非堆内存量(以兆字节为单位)。这些占用内存的内容包括VM开销、国际字符串、其他本机开销等。这通常随着容器大小的增加而增长(通常为6-10%)。

有关内存优化的更多信息,请参见内存管理概述

还请查看SO的以下主题:容器运行超出内存限制

干杯!

0