在哪里设置 "spark.yarn.executor.memoryOverhead"

Where to set "spark.yarn.executor.memoryOverhead"

我在 运行 我的 spark-scala 程序中出现以下错误。

YarnSchedulerBackends$YarnSchedulerEndpoint:容器因超出内存限制而被 YARN 杀死。使用了 2.6GB 的 2.5GB 物理内存。考虑提升 spark.yarn.executor.memoryOverhead.

我在创建SparkSession的时候在程序里设置了spark.yarn.executor.memoryOverhead

我的问题是 - 在创建 SparkSession 时设置 "spark.yarn.executor.memoryOverhead" 是否可以,还是应该在运行时使用 spark-submit 传递?

您必须在创建 sparkSession 时设置 spark.yarn.executor.memoryOverhead。此参数用作要为每个执行程序分配的堆外内存量(以兆字节为单位)。这是内存,用于解释 VM 开销、驻留字符串、其他本机开销等。这往往会随着执行程序的大小(通常为 6-10%)而增长。

现在这个分配只能在执行器分配时完成,不能在运行时完成。